2016-09-06 12 views
5

Agregaları oluştururken, kümeler içinde değer nesneleri oluşturmalıyız veya önceden oluşturulmuş değer nesnelerini ctor veya fabrikaya geçirmeliyiz.DDD: Agrega içindeki Instantiate Value nesnelerini veya parametre olarak iletin mi?

public Booking(DateTime arrivalDate, DateTime departureDate) 
{ 
     this.ArrivalAndDepartureinformation = new ArrivalAndDepartureInfo(arrivalDate, departureDate); 
} 

veya

public Booking(ArrivalAndDepartureinformation arrivalAndDepartureInfo) 
{ 
      this.ArrivalAndDepartureinformation = arrivalAndDepartureInfo; 
} 
+0

olan soru: nasıl bu Kurucular kullanıyorsunuz ve bu yapıcı parametreleri nereden geliyor? –

cevap

3

örneğini değer nesneler veya parametre olarak geçmek? Biz yapıcı içine parametreleri geçen hakkında konuşuyorsanız

  • , bunun nasıl kullanıldığına bağlıdır. İlkel türlerin kullanımını gerektirebilecek bazı altyapı sınırlamaları olabilir.

  • o zaman Değer Nesneleri yöntemleri içine parametreleri geçen hakkında konuşuyorsanız

    % 100 benim seçimim. Genelde

, ben senin agrega içine değer nesneleri geçmek iyidir söyleyebilirim.

Değer Nesneler edebilirsiniz: sizin

  • yapmak dil
  • kendi davranış
+1

Bu nedenle, uygulama servisine gönderilen giriş parametreleri, agrega fabrikalarına veya konstrüktörlere gönderilecek değer nesneleri oluşturmak için kullanılır. – Robert

+0

Evet. Modelinizde daha az parametre, daha spesifik parametreler ve daha anlamlı bir dil elde edebilirsiniz. –

3

alanı modeli domain değil uygulama primitifler konuşmalısınız.

Başvurunuz bileşeni normalde ham veri alma ve modelin dilde ifade sorumluluğunu sahibi. Agrega içinde

2

genel bir kılavuz tavsiye ediyorum tip emniyet

  • kapsülü doğrulama kuralları getirmek daha etkileyici modellemek Bu:

    • Etki alanı modelinin içinde, mümkün olduğunca çok değer nesneleri kullanın.
    • Temel öğeleri, etki alanı modelinin sınırındaki değer denetleyicilerine dönüştürün (denetleyiciler, uygulama hizmetleri). Bu yerine Örneğin

    :

    public void Process(string oldEmail, string newEmail) 
    { 
        Result<Email> oldEmailResult = Email.Create(oldEmail); 
        Result<Email> newEmailResult = Email.Create(newEmail); 
    
        if (oldEmailResult.Failure || newEmailResult.Failure) 
         return; 
    
        string oldEmailValue = oldEmailResult.Value; 
        Customer customer = GetCustomerByEmail(oldEmailValue); 
        customer.Email = newEmailResult.Value; 
    } 
    

    yapın:

    public void Process(Email oldEmail, Email newEmail) 
    { 
        Customer customer = GetCustomerByEmail(oldEmail); 
        customer.Email = newEmail; 
    } 
    
  • İlgili konular