質問
クラスデザインが良いか。
public class User
{
public String UserName;
public String Password;
public String FirstName;
public String LastName;
}
public class Employee : User
{
public String EmployeeId;
public String EmployeeCode;
public String DepartmentId;
}
public class Member : User
{
public String MemberId;
public String JoinDate;
public String ExpiryDate;
}
または
public class User
{
public String UserId;
public String UserName;
public String Password;
public String FirstName;
public String LastName;
}
public class Employee
{
public User UserInfo;
public String EmployeeId;
public String EmployeeCode;
public String DepartmentId;
}
public class Member
{
public User UserInfo;
public String MemberId;
public String JoinDate;
public String ExpiryDate;
}
解決
質問には回答をさせていただきることを認識継承モデルの"である"との関係、会員のモデルは、"は-A"。
- 従業員がユーザー
- 従業員はuserinfo
る適切なものはどれですか。これはお答えです。
他のヒント
ないと思います。その際にはメンバーであり、従業員?
自分自身に尋ね下
- ているモデルの従業員 は ユーザー?その場合、選択された。
- ているモデルの従業員 は ユーザー情報?その場合、利用組成物。
- 仮想機能に関与すると、(詳細情報)と、従業員?その場合、継承関係を示します。
- で、社員にてインスタンスが複数のユーザーの詳細情報)?その場合、利用組成物。
- ることに意味が割り当ての従業員へのオブジェクトのユーザ(詳細情報)オブジェクト?その場合、継承関係を示します。
一般に努めのモデルは現実のプログラムを模擬し、制約のコードの複雑さが必要。
とは思わない構成は常により継承もあります。する場合、会員は利用者は、互いに独占的で、その後の最初のデザインが優れています。のシナリオがアクセスするために必要なユーザのユーザ名。使用のデザインについ:
myEmployee.UserInfo.UserName
は悪い(法のデメーテルですrefactor:
myEmployee.UserName
を必要とする小さな方法を従業員に権限を委譲のユーザオブジェクトです。すべての回避をしています。
素敵な質問は避け辞約 右 や 間違った 思考えるうえで、是非各アプローチ--それでいいんじゃないかとは良くも悪くも、いかがでしょうか。とにかく....
最初のアプローチ通称継承
メリット:
- できる多様な行動です。
- は 最初に シンプルで便利です。
連結:
- 月 となりましたので、不器用な時間 の場合 より挙動と関係が追加されます。
第二のアプローチ通称構成
メリット:
- マップも非oopシナリオのような関係のテーブル構造化プログラミングなど
- することは複雑なことではないかない場合は、必ずしも便利で) 段階的に 拡張関係や行動です。
連結:
- ない多型そのために、以下のご利用に便利に関する情報と行動
リストのようなことを質問 Jon Limjap うまく決定のために--を見つけることが何なのか 右 回答はしてい;-)
でも思いのまま従業員として 役割 のユーザー名です。の役割のユーザが変更できる時間(ユーザーになり失業者又はユーザが複数の役割も同時に行います。
相続がりがある場合 実 "は"関係は、例えばAppleます。もうよう十分注意してください:円-楕円は実質"は"関係がcirlce少ない"自由"より楕円(円 状態 の楕円ください: 円楕円問題.
現実の問題:
- の事業規則及びユーザー物語の背後にユーザー?
- の事業規則及びユーザー物語の背後に従業員?
- の事業規則及びユーザーの語りの裏手にするのですか?
これら三つの全く関係のない主体がいるかどうかごやデザインの仕事場合、または他の全く異なるデザインが必要なのだ。
ものです。も変更可能な状態です。すべきではないに施工することができ、クラスのインスタンスが無効または部分的に初期化されます。
とはいえ、二つ目には、よりよいので好きな成分以上継承関係を示します。
記載要件/仕様が到着の最高のデザイン.
ご質問があるのに対しを読み解釈"のようです。
このシナリオについてどのように考えればよい:
組成(第2回例)であることが好ましい場合は同じユーザーを見つけることができます従業員とします。なぜですか?かつインスタンス(社員、会員に代表されるユーザーが同じ場合、ユーザーデータの変化を継続してご利用いただけ更新しました。ユーザのみインスタンスを含む全てのユーザー情報のみで更新されます。で従業員と会員のクラスでは、同じユーザインスタンスは、自動的に両方を含む最新情報です。
三つのオプション:
ての
User
クラスの補足情報と従業員は、未使用の分野のブランク(ID
特定のUser
いるかどうかを示す、ユーザーが社員、会員は、いずれも、など).してい
User
クラスへの参照を含む、ISupplementalInfo
, では、ISupplementalInfo
継承ISupplementalEmployeeInfo
,ISupplementalMemberInfo
, など。コードに適用できるすべてのユーザーが作User
クラスオブジェクトおよびコードするたUser
参考えのアクセスユーザーの補足情報をもとに、このアプローチするには、できるだけ多くを変更User
と異なる場合の組み合わせの補足情報が必要です。上記のもの
User
クラスが含まれている種の収集ISupplementalInfo
.このアプローチに活用促進の実行時のほか、物件のユーザ(例えばがMember
た雇).利用の場合、前のアプローチの違いによって定義さの異なるクラスの異なる組み合わせ物件転換"会員"への会員+"お客様が必要と異なるコードからの転換を"社員"、"社員+"お客様.の点については、後者のアプローチであることができるとされていることで、硬めの防冗長との間に不一致がある場合は属性を使うようにDictionary<Type, ISupplementalInfo>
めの補足情報な作品がが見られるようにちょっとした"粗大ごみ").
い傾向があることを第二のアプローチするので将来的な拡張により良いものを直接継承関係を示します。作業オブジェクトのコレクションではなく単一のオブジェクトが若干負担なので、そのアプローチされておく方が良いかもしれないときの取扱いの変更ます。