2016-07-12 7 views
0

私はDDDとエンティティおよび値型について学びました。エンティティタイプ内から値の型を設定する正しい方法を照会しています。以下の "Leader"クラスでは、 "SetAddress"と "SetName"メソッドがありますが、Entityタイプ内から値タイプを更新する正しい方法ですか?ドメイン駆動設計。エンティティタイプの設計

また、私はPhoneNumbersのリストを持っています、これを処理するための推奨される方法は何ですか?私はリストにあなたの助けのためのEG-

leader.PhoneNumbers.Add(new PhoneNumber("12345", Mobile); 

感謝のPhoneNumberを追加する必要があります:

public class Leader:Entity 
{ 
    public void SetName(string firstName, string surname) 
    { 
     Name = new Name(firstName, surname); 
    } 

    public Name Name { get; private set; } = Name.Empty; 

    public void SetAddress(string street, string city, string postode) 
    { 
     Address = new AddressDetails(street, city, postode); 
    } 

    public AddressDetails Address { get; private set; } = AddressDetails.Empty; 

    public List<Phone> PhoneNumbers { get; set; } 
} 

public class AddressDetails : ValueObject<AddressDetails> 
{ 
    public static readonly AddressDetails Empty = new AddressDetails(string.Empty, string.Empty, string.Empty); 

    public AddressDetails(string street, string city, string postode) 
    { 
     Street = street; 
     City = city; 
     Postcode = postode; 
    } 

    public string Street { get; } 
    public string City { get; } 
    public string Postcode { get; } 

    protected override bool EqualsCore(AddressDetails other) 
    { 
     return Street == other.Street && 
      City == other.City && 
      Postcode == other.Postcode; 
    } 

    protected override int GetHashCodeCore() 
    { 
     unchecked 
     { 
      int hash = 17; 
      hash = (hash * 23)^Street.GetHashCode(); 
      hash = (hash * 23)^City.GetHashCode(); 
      hash = (hash * 23)^Postcode.GetHashCode(); 
      return hash; 
     } 
    } 
} 

答えて

1

を私は、「SetAddress」と「SetNameメソッド」メソッドを持っている、これは正しい方法ですエンティティタイプ内から値タイプを更新しますか?

モデリング対象のビジネスプロセスによって異なります。 DDDでは、通常、ユビキタス言語の単語を使用してメソッドの名前を付けます。この例は非常にCRUDのような感じです。あなたがドメイン専門家と話すとき、彼らはそのプロセスを何と呼んでいますか?

技術的に言えば、あなたの例は1つのアプローチです。もう1つは、値オブジェクトをメソッドに直接渡すことで、コンセプトをAPIの呼び出し元に公開することです。すなわち

public void SetAddress(AddressDetails addressDetails) 
{ 
    Address = addressDetails; 
} 

自分のドメインのみ(すなわちAddressDetailsオブジェクトではなく、いくつかのスカラー値)であるかの事を知っているあなたのAPIのドメインの概念と発信者を扱っているこの方法です。

また、私はの電話番号のリストを持って、これを処理するための推奨方法は何ですか?

これは、基本ストレージメカニズム(この場合はリスト)を公開するかどうかによって異なります。あるいは、AddPhoneNumber(Phone phoneNumber)のようなメソッドを使用すると、リストに格納するということを隠すことができます。基礎となるストレージを変更した場合、APIにはチャニングが必要ない場合があります。 YMMV。ここでもビジネスプロセスはどのようにモデル化されていますか?電話番号のリストは、ドメイン内で公開すべき概念ですか?それとも、他のプロセスによって必要とされるだけですか? (つまり、注文が送信されたときにSMSを送信するようなもの)

+0

ありがとうございました。それはすべて意味をなさない。電話番号のリストを処理するために、 "PhoneList"または "PhoneCollection"タイプが必要なような気がします。 – Andrew

関連する問題