Rob*_*ert 5 domain-driven-design value-objects
在创建聚合时,我们是否应该在聚合中创建值对象,或者我们应该将已创建的值对象传递给ctor或factory.
public Booking(DateTime arrivalDate, DateTime departureDate)
{
this.ArrivalAndDepartureinformation = new ArrivalAndDepartureInfo(arrivalDate, departureDate);
}
Run Code Online (Sandbox Code Playgroud)
要么
public Booking(ArrivalAndDepartureinformation arrivalAndDepartureInfo)
{
this.ArrivalAndDepartureinformation = arrivalAndDepartureInfo;
}
Run Code Online (Sandbox Code Playgroud)
在 Aggregate 中实例化 Value 对象还是将其作为参数传递?
如果我们谈论将参数传递给构造函数,这取决于它是如何使用的。可能存在一些需要使用原始类型的基础设施限制。
如果我们谈论将参数传递给方法,那么值对象是我 100% 的选择。
一般来说,我会说最好将值对象传递到您的聚合中。
值对象可以:
我建议的一般准则是:
例如,而不是这样:
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;
}
Run Code Online (Sandbox Code Playgroud)
做这个:
public void Process(Email oldEmail, Email newEmail)
{
Customer customer = GetCustomerByEmail(oldEmail);
customer.Email = newEmail;
}
Run Code Online (Sandbox Code Playgroud)