0

解決して理解するためのヒントと説明が必要なタスクがあります。お客様用のレジについてです。

Contact とリレーションを持つ ContactForm と、Adress、Email、Phone とリレーションを持つ Contact です。

ユーザーが ContactForm に情報を入力すると、この情報が渡され、クラス Adress、Email、および Phone でチェックされます。しかし、情報は Contact クラスを経由する必要があると思います。次に、ContactForm 内に Contact のオブジェクトを作成し、データを Contact のコンストラクターに送信しますが、Contact のフィールドで宣言されている Adress、Phone、および Email のコンストラクターでオブジェクト参照を使用していることが予想されます。これは私がそれがどのように機能するのか理解していませんか?おそらく、オブジェクト参照の使用は、Contact のコンストラクターに多くのデータを送信することを避けるためですか?

また、プロパティを使用して情報を設定および取得します。ここでも同じことですが、オブジェクトの参照を使用することが期待されています。

私の指示を理解すれば、Contact のコンストラクターは次のようになります。

Contact(string firstName, string lastname, Adress adr, Phone tel, Email mail)

このようなコンストラクタを使用する必要がある場合に、フォームからのデータをどのように渡す必要があるのか​​ 理解できないのはここですか?

4

2 に答える 2

0

コンストラクターでオブジェクト参照を使用するポイントは、より動的であることです。
次のようなコンストラクタを作成したとします。

public void main()
{
    var c = new Contact("europeroad",9999, "USA");
}

public Contact(string address, int zipcode, string country){
    this.Address = new Address(address,zipcode,country);
}

これはもちろん機能しますが、新しいフィールドを追加するとどうなりますか? region、createdon、...
2 つのコンストラクターと 2 つのコンストラクター呼び出しを調整する必要があります。
オブジェクト参照で提案したようにすると、次の結果が得られます。

public void main()
{
  var a = new Address();
  a.Street = "europeroad";
  a.Zipcode = 9999;
  a.Country = "USA";
  var c = new Contact(a);
}
public Contact(Address address){
    this.Address = address;
}

ここに新しいフィールドを追加しても、メイン メソッドが変更されるだけです (署名の変更は必要ありません)。

于 2012-04-27T08:02:45.767 に答える
-1

ユース ケース、UC およびシステム シーケンス図から生成するドメイン モデルによって異なります。正直なところ、これは非常に一般的な UC であり、多くの解決策があると言えます。Craig Larmans OO Analysis and Design Book に基づく:

UC: ユーザーが連絡先情報を入力します。システムは情報の有効性をチェックします。(エラーについては、この手順の詳細を説明できます。ここでは簡単に説明したいので、詳細は省略します ...) システムがユーザーに成功メッセージを表示します。

彼らによると、システムには連絡先の概念があり、連絡先には住所の電子メールと電話が含まれています。ドメイン モデルには、連絡先、住所、電子メール、電話という 4 つの異なる概念があります。UC および Grasp Design パターンに従って、コントローラー オブジェクトを実装して、UI と Bussines ロジックを分離する必要があります。

Contact/何らかの結果表示 ContactController(ユーザー、住所情報、電話情報)

連絡先は Controller からの情報で表現できるため、Contact オブジェクトを作成した方がわかりやすいです。私の意見では、デザインは消費するデータ量よりも重要です。正直なところ、オブジェクトが大量のデータを消費する場合、設計に問題があると言えます:)

于 2012-04-27T08:08:40.460 に答える