Iva*_*van 2 c# domain-driven-design
将值对象传递给实体方法(就DDD而言)的良好做法?例如,我的实体客户中有一个方法:
SetAddress(Address invoiceAddress);
Run Code Online (Sandbox Code Playgroud)
它有效吗?或者我应该传递地址参数
SetAddress(string street, string town, string zip, string country);
Run Code Online (Sandbox Code Playgroud)
并让客户处理地址对象的创建,如果需要抛出异常.
地址是不可变对象.
你绝对应该传递一个Address对象.它在DDD方面是有效的,它也有利于可扩展性(即你可以在Address不改变SetAddress方法签名的情况下向对象添加更多字段).
该Address对象还应包含地址信息的验证逻辑,Customer.SetAddress(...)方法可以在设置地址之前执行:
public class Customer
{
public SetAddress(Address invoiceAddress)
{
// ToDo: Execute validation logic encapsulated in 'Address' object
// ToDo: Execute additional validation logic here
}
}
Run Code Online (Sandbox Code Playgroud)