当我为一个领域设计模型时,它们几乎总是最终具有一些.IsSomething
功能。 IsNew
并且IsDirty
对于数据持久性目的,IsValid
业务规则验证,甚至IsFraudulent
在当前项目(更多业务规则验证)等方面都很常见。每当我看到其他人实现这些时,它们几乎总是作为方法来完成。但我发现自己想知道是否有特定的原因。
我倾向于将属性视为描述对象,将方法视为执行某种操作。这些并没有真正执行操作。它们涉及代码,因为它们在调用时是动态确定的,而且它们显然是只读的,但对我来说,它们仍然适合作为属性而不是方法。
我想,属性可能存在序列化问题。尽管富域模型由于包含逻辑和功能而往往不能很好地序列化,但每当我需要跨服务边界移动某些东西时,我通常首先将其扁平化为定义的 DTO 结构。
但我想知道是否有人对这个主题有任何见解?是否有充分的理由将这些实现为方法而不是属性?
(切线相关,虽然已经给出了答案,但扩展属性确实有助于保持这样的一致性。我有许多IsSomething()
扩展方法,通常是 on System.String
,用于实现特定于域的逻辑。但即使属性是去吧,我可能想坚持使用方法只是为了与扩展保持一致。)