2016-09-06 15 views
5

Khi tạo tổng hợp, chúng ta có nên tạo các đối tượng giá trị bên trong tập hợp hay không, hoặc chúng ta nên truyền các đối tượng giá trị đã tạo cho ctor hoặc factory.DDD: Khởi tạo các đối tượng Value bên trong Aggregate hoặc chuyển nó thành tham số?

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

hoặc

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

Câu hỏi là: Làm thế nào để bạn sử dụng những nhà xây dựng và nơi nào những thông số nhà xây dựng đến từ đâu? –

Trả lời

3

Khởi tạo Đối tượng giá trị bên trong Tổng hợp hoặc chuyển nó làm tham số?

  • Nếu chúng ta nói về truyền thông số vào constructor, nó phụ thuộc vào cách nó được sử dụng. Có thể có một số hạn chế về cơ sở hạ tầng có thể yêu cầu sử dụng các kiểu nguyên thủy.

  • Nếu chúng ta nói về việc chuyển các tham số vào các phương thức thì Đối tượng giá trị là 100% lựa chọn của tôi.

Nói chung, tôi muốn nói nó là tốt hơn để vượt qua đối tượng giá trị vào uẩn của bạn.

Đối tượng Giá trị có thể:

  • làm ngôn ngữ của bạn mô hình biểu cảm hơn
  • mang lại an toàn kiểu
  • quy tắc xác nhận Encapsulate
  • hành vi của
+1

Vì vậy, các thông số đầu vào được gửi đến dịch vụ ứng dụng, được sử dụng để xây dựng các đối tượng giá trị sẽ được gửi đến tổng hợp nhà máy hoặc constctors – Robert

+0

Có. Và bạn có thể nhận được ít thông số hơn, các loại cụ thể hơn cho thông số của bạn và ngôn ngữ biểu cảm hơn trong mô hình của bạn. –

3

Mô hình miền nên nói chuyện tên miền, không thực hiện nguyên thủy.

Thành phần ứng dụng của bạn thường có trách nhiệm lấy dữ liệu thô và thể hiện nó bằng ngôn ngữ của mô hình.

2

Các hướng dẫn chung Tôi muốn giới thiệu là:

  • Bên trong mô hình miền, sử dụng các đối tượng giá trị càng nhiều càng tốt.
  • Chuyển đổi nguyên thủy thành các đối tượng giá trị ở ranh giới của mô hình miền (bộ điều khiển, dịch vụ ứng dụng).

Ví dụ, thay vì điều này:

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; 
} 

Làm điều này:

public void Process(Email oldEmail, Email newEmail) 
{ 
    Customer customer = GetCustomerByEmail(oldEmail); 
    customer.Email = newEmail; 
} 
Các vấn đề liên quan