【问题标题】:magic GET and SET for object initialization question对象初始化问题的魔术 GET 和 SET
【发布时间】:2011-02-18 14:23:45
【问题描述】:

我想知道面向类的 DDD 的最佳实践。

由于我在名为 ChangeX(string x) 的自定义设置器中进行域验证,因此我可能会被推送以将其用作属性。

公共虚拟字符串示例 { get; 私人套装; }

但是,这不是很好,因为它使我无法使用对象初始化功能,例如:

new Object { Example = "一些例子" }

那么我为什么不将自定义集传递给属性集呢?像这样

公共虚拟字符串示例 { 获取 { 返回示例; } 放 { 更改示例(值); } }

这会导致任何问题吗?是否违反最佳做法?

谢谢。

【问题讨论】:

    标签: c#-4.0 domain-driven-design


    【解决方案1】:

    这里真正的问题是使用 setter。为什么需要它们?

    当您使用 setter 时,您会失去隔离 - 您可以从外部修改对象的状态,而他们不知道这一点。这导致程序代码。

    相反 - 您应该要求对象做一些事情(不仅仅是修改它们的状态),最终可能会导致它们改变自己的状态。

    【讨论】:

    • 你谈论的是哪一个?这些 ?公共虚拟字符串示例 { 获取;私人套装; }
    • @Rushino 私人二传手很好。如果它是私有的,则您不会公开从外部修改状态的能力。我说的是公共的。
    • @Rushino 您也不应该使用对象初始化功能。您应该定义精确的构造函数。通过它们,您可以保证域对象将被构造为有效。
    【解决方案2】:

    我认为这个解决方案很好。使用 setter 的一个原因是确保您的底层字段永远不会包含错误的值。

    【讨论】:

      猜你喜欢
      • 2016-01-06
      • 1970-01-01
      • 2012-05-18
      • 2021-03-25
      • 2018-02-15
      • 1970-01-01
      • 2010-09-20
      • 2014-03-07
      • 1970-01-01
      相关资源
      最近更新 更多