0

継承を使用してクラスとそのサブクラスを作成するためのベスト プラクティスを理解するのに問題があります。

たとえば、プロジェクトに 3 種類のユーザーを実装したいとします。

管理者、ユーザー、連絡先

  1. 連絡先これは、管理者またはユーザーによって作成されたユーザー (フルネーム、電子メール、電話、およびその他の連絡先の詳細を含む) であり、システムにログインすることはできません。彼らが各ユーザーのプライベート電話帳のメンバーにすぎないと想像してください。

  2. ユーザーこれは、管理者が作成できるユーザーです (フルネーム、電子メール、電話番号、およびその他の連絡先の詳細が含まれます)。連絡先を作成できますが、他のユーザーは作成できず、システムにログインできます。また、管理者の電話帳のメンバーになることもできます (そうすべきです)。

  3. 管理者これはユーザーです (フルネーム、電子メール、電話番号、およびその他の連絡先の詳細が記載されています)。ユーザーや連絡先を作成したり、(もちろん) システムにログインしたりできます (簡単にするために、これらのユーザーは Web フォームの送信によって作成されるとしましょう)。

それらの(簡略化された)属性は次のとおりです。

連絡先: 電子メール、電話番号、市区町村、owner_id、date_in

ユーザー: 電子メール、電話、都市、owner_id、パスワード、date_in

管理者: 電子メール、電話、都市、パスワード、date_in

データベーステーブル(ユーザー)は次のようなものです:

  • id: auto_increment
  • owner_id: このユーザーを作成したユーザーの ID
  • フルネーム: テキスト
  • メール: テキスト
  • 電話: テキスト
  • 都市: テキスト
  • user_type: (連絡先 || ユーザー || 管理者)
  • date_in: サインアップした日時
  • パスワード: (該当する場合)

継承を使用する必要があるかどうかわかりません...次のスキームは正しいですか?

class Contact{
}

class User extends Contact{
}

class Admin extends User{
}

その他の問題: Admin と User には、新しいユーザーを作成できるメソッドが必要です (名前を create_user() にします)。ただし、それぞれが異なるチェックを行い、異なるオプションを許可し、異なる種類のものをデータベースに挿入する必要があります。そうするためのベストプラクティスは何ですか?親クラスにジェネリックを書き込み、サブクラスを介してそれを呼び出し、サブクラスからのエントリを余分なデータで更新しますか? (例: 管理者はパスワードもデータベースに保存する必要があります)

更新:多分私は十分に明確ではなかった...

ユーザーのタイプとは関係のない一般的なメソッドがたくさんあります。これが継承が必要な理由です。共通の db テーブルも必要です。

ここでの私の主な問題は、さまざまなものを作成する必要がある一般的なメソッドを実装する方法です...たとえば、これはクラス "User" の user_create() です

function user_create($email, $telephone){
  dbquery("insert into users ....");
  return insert_id();
}

次のように管理者に同じメソッドを実装するのは良い習慣になるのではないかと思います:

function user_create($email, $telephone, $user_type, $password=''){
  $new_id = parent::user_create($email, $telephone);
  if (user_type == 'User'){
    query("UPDATE users SET type='User', password='$password' WHERE id='$new_id'");
  }
  return $new_id;
}
4

2 に答える 2

0

それは問題ないように見えますが、基本クラスとしての User はおそらくより良い見通しです.

同じメソッド名を使用するが実装が異なる一連のクラスを作成する場合は、インターフェイスを使用することをお勧めします。何かのようなもの:

Interface User
{
   public function create();
}

class Contact implements User
{
  public function create(){}
}

class Admin implements User
{
  public function create(){}
}

.. 等々。

于 2013-05-20T17:54:29.840 に答える