gpt4 book ai didi

c# - Model.Is___ - 它应该是属性还是方法?

转载 作者:行者123 更新时间:2023-11-30 19:21:05 25 4
gpt4 key购买 nike

当我为一个领域设计模型时,它们几乎总是最终具有一些 .IsSomething 功能。 IsNewIsDirty 通常用于数据持久化目的,IsValid 用于业务规则验证,甚至 IsFraudulent 在当前项目中也是如此(更多业务规则验证)等。每当我看到其他人实现这些时,它们几乎总是以方法的形式完成。但我发现自己想知道这是否有特殊原因。

我倾向于将属性视为描述对象,将方法视为执行某种操作。这些并没有真正执行任何操作。它们涉及代码,因为它们是在调用时动态确定的,而且它们显然是只读的,但对我来说它们仍然适合作为属性而不是方法。

我想可能存在属性序列化问题。尽管丰富的域模型往往不能很好地序列化,因为它包含逻辑和功能,所以每当我需要跨服务边界移动某些东西时,我通常都会先将其扁平化为定义的 DTO 结构。

但我想知道是否还有其他人对这个主题有任何见解?是否有充分的理由将这些实现为方法而不是属性?

(切向相关,虽然 an answer has already been given ,扩展属性确实有助于在这样的事情上保持一致性。我有许多 IsSomething() 扩展方法,通常在 System.String 上,用于实现特定于域的逻辑。但即使属性是可行的方法,我也可能希望坚持使用方法,只是为了与扩展保持一致。)

最佳答案

假设访问属性:

  • 没有副作用
  • “相当快”(是的,非常笨拙...)

那么我认为没有理由不将其作为属性(property)。序列化应该不是问题 - 大多数序列化方案都提供了将属性标记为 transient (即不可序列化)的方法。

关于c# - Model.Is___ - 它应该是属性还是方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4429567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com