在DDD中,为什么他们经常使用方法而不是属性?

时间:2012-01-08 12:49:38

标签: c# domain-driven-design

在DDD示例中,我经常看到使用可能使用过属性的方法。这是为什么?

例如(来自Strengthening your domain: Aggregate Construction

public class Order
{
    public bool IsLocal()
    {
       return Customer.Province == BillingProvince;
    }
}

2 个答案:

答案 0 :(得分:8)

选择方法而不是属性的一个论点是,当有任何代码可以执行某些操作时。如果它只返回一些内部字段值,则使用property。如果它内部有任何逻辑或进行任何计算使用方法。这使得代码客户端更清楚,当您调用此方法时会发生某些事情。

我想我已经在CLR via CSharp中读到微软后悔让DateTime.Now成为属性而不是方法。每次调用它都会返回新值。这应该是方法而不是财产。

答案 1 :(得分:2)

没有理由用特定于DDD的方法替换getter。一般指导原则适用于此(执行繁重计算或更改状态时执行此操作)。

Setter是一个不同的案例。有些人甚至认为它们是代码味道。每次看到二传手都会产生怀疑。在理想情况下,仅在名称与域中的动词一致的方法中更改对象的状态。