在DDD示例中,我经常看到使用可能使用过属性的方法。这是为什么?
例如(来自Strengthening your domain: Aggregate Construction)
public class Order
{
public bool IsLocal()
{
return Customer.Province == BillingProvince;
}
}
答案 0 :(得分:8)
选择方法而不是属性的一个论点是,当有任何代码可以执行某些操作时。如果它只返回一些内部字段值,则使用property。如果它内部有任何逻辑或进行任何计算使用方法。这使得代码客户端更清楚,当您调用此方法时会发生某些事情。
我想我已经在CLR via CSharp中读到微软后悔让DateTime.Now
成为属性而不是方法。每次调用它都会返回新值。这应该是方法而不是财产。
答案 1 :(得分:2)
没有理由用特定于DDD的方法替换getter。一般指导原则适用于此(执行繁重计算或更改状态时执行此操作)。
Setter是一个不同的案例。有些人甚至认为它们是代码味道。每次看到二传手都会产生怀疑。在理想情况下,仅在名称与域中的动词一致的方法中更改对象的状态。