将值对象传递给实体方法

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)

并让客户处理地址对象的创建,如果需要抛出异常.

地址是不可变对象.

Teo*_*gul 5

你绝对应该传递一个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)