【发布时间】:2011-05-24 16:40:00
【问题描述】:
当我为某个域设计模型时,它们几乎总是最终具有一些 .IsSomething 功能。 IsNew 和 IsDirty 常见于数据持久化目的,IsValid 用于业务规则验证,甚至 IsFraudulent 在当前项目中(更多业务规则验证)等。每当我看到这些由其他人实现时,它们几乎总是这样做的方法。但我发现自己想知道这是否有特殊原因。
我倾向于将属性视为描述对象,将方法视为执行某种操作。这些并没有真正执行操作。它们涉及代码,因为它们是在调用时动态确定的,而且它们显然是只读的,但对我来说,它们仍然适合作为属性而不是方法。
我想,属性可能存在序列化问题。尽管富域模型由于包含逻辑和功能而往往不能很好地序列化,所以每当我需要跨服务边界移动某些东西时,我通常首先将其扁平化为定义的 DTO 结构。
但我想知道是否有人对此主题有任何见解?是否有充分的理由将这些实现为方法而不是属性?
(切向相关,虽然an answer has already been given,扩展属性确实有助于保持这样的一致性。我有许多IsSomething() 扩展方法,通常在System.String 上,用于实现特定于域的逻辑。但即使如果属性是要走的路,我可能想坚持使用方法只是为了与扩展保持一致。)
【问题讨论】:
-
或者您可以交叉手指并希望在 c# 5 中获得扩展属性 :)
标签: c# domain-model