干净的域驱动设计(DDD)是一个乌托邦吗?

时间:2011-06-08 07:51:08

标签: c# oop architecture domain-driven-design

我想我读过关于DDD的所有书以及如何在C#中应用它(3-5本书,不记得它是几年前的。)

但是在过去的两年里,我在所有项目中使用了贫血领域模型并且运作良好。实际上我从未尝试过实现纯域模型,而且我从未见过使用干净域模型方法的一段代码。

以本书中的代码为例,DDD不遵循DDD风格。以Tim MacCarthy关于DDD http://dddpds.codeplex.com/的书中的代码为例,查看他的域对象,它们对任何行为都是干净的只是DTO是他集成到域对象中的唯一东西就是验证,如果我在DDD中正确记得你的域不应该处于无效状态,因此您应该防止设置无效值并抛出异常而不是允许设置它们并在某些时候进行验证。

与其他书籍和示例代码相同的情况,它们都非常简单,只显示一个具有属性的类,最多可以找到一组插入\删除子对象的方法来设置父属性。例如,我几乎看不到使用域事件或将服务注入域对象的代码。

2003年,马丁福勒写了一篇文章告诉我们,贫血领域模型是一件坏事{8}过去了8年,我认为贫血模型现在非常流行(它演变为分层架构)。并且在3层RIA开发中使用很多。

所以我的主要问题是干净的DDD乌托邦?它死了吗?包括我在过去3年里看到的所有代码是分层架构(在我看来,它是本质上贫血的领域模型)。如果存在,我非常希望看到一些干净的DDD代码。

1 个答案:

答案 0 :(得分:6)

你并不孤单。在大多数地方,真正的DDD将是一个乌托邦。根据我的经验,这是由于两个主要原因。

  1. 业务并不成熟,无法帮助开发人员进行域建模。没有足够的时间,资源和精力去做。
  2. 项目团队如果以前没有做过DDD,就没有特别的经验。
  3. DDD也不适用于许多CRUDy应用程序。还有像CQRS这样的替代方法。 另请参阅以下博客链接,以了解贫血领域模型。

    http://codebetter.com/gregyoung/2009/07/15/the-anemic-domain-model-pattern/
    http://lostechies.com/jimmybogard/2009/12/03/persistence-model-and-domain-anemia/