【问题标题】:POCO in Domain Driven Design(DDD)领域驱动设计(DDD)中的 POCO
【发布时间】:2012-11-15 22:24:30
【问题描述】:

POCO类在领域驱动设计中有Validate()方法等行为,是真的吗?

【问题讨论】:

  • 域类(POCO)当然应该包含相关的行为。 Validate 等验证方法是否属于实体类 (POCO) 是有争议的。很多时候,最好让实体始终有效。
  • 这种方式会不会导致POCO有依赖?
  • 依赖什么?这种方法强制您在尝试创建实体 (POCO) 之前确保您拥有有效数据。例如,可以在 UI 中执行验证。
  • 你的意思是实体不是 POCO,对吧? POCO 与域实体正交。您可以拥有非实体 POCO 和非 POCO 实体。
  • 关于 DDD,非 POCO 实体可能有点问题,但我可以互换使用 POCO 和实体。更具体地说,我的意思是将实体表示为 POCO。

标签: domain-driven-design poco


【解决方案1】:

是的——“实体”封装了对象的数据和行为——所以它不再是一个普通的旧合约对象,它是一个域对象。

一种思考方式是想象您的其他代码都无法看到对象的属性,因此它们无法...

if (myDomainObject.Name != null) ...

他们必须打电话

if (myDomainObject.IsValid()) ...

当您更改使其有效的规则时,只需在域对象中进行更改,因为您已阻止逻辑从外部泄漏到使用它的代码中。

【讨论】:

    【解决方案2】:

    是的,领域驱动设计中的领域模型的类应该关注行为,如果这就是你的意思的话。

    【讨论】:

    • 好的,谢谢。这种做法会不会导致 POCO 有依赖?
    • 领域模型中的类不应依赖于应用程序的其他模块。
    【解决方案3】:

    没有。他们没有像Validate() 这样的方法。

    DDD 实体应始终处于有效状态。这就是我们在类上使用行为(方法)而不是公共属性设置器的原因。

    这种方式会不会导致POCO有依赖?

    没有。通常一切都取决于 DDD 模型,反之亦然。

    【讨论】:

      猜你喜欢
      • 2011-05-10
      • 1970-01-01
      • 2018-07-03
      • 2010-11-16
      • 1970-01-01
      • 2011-10-06
      • 2016-09-26
      • 1970-01-01
      • 2023-02-23
      相关资源
      最近更新 更多