清洁领域驱动设计(DDD)是一个乌托邦吗

本文关键字:一个 乌托邦 DDD 清洁 | 更新日期: 2023-09-27 17:58:50

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

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

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

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

2003年,Martin Fowler写了一篇文章,告诉我们贫血领域模型是一件坏事http://www.martinfowler.com/bliki/AnemicDomainModel.html8年过去了,我认为贫血模型现在很流行(它演变成了分层架构)。并在三层RIA开发中大量使用。

所以我的主要问题是清洁DDD是一个乌托邦吗?它死了吗?因为在过去三年里,我看到的所有代码都是分层架构(在我看来,这是一个本质上缺乏活力的领域模型)。我非常希望看到一些干净的DDD代码,如果它存在的话。

清洁领域驱动设计(DDD)是一个乌托邦吗

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

  1. 业务还不成熟,无法帮助开发人员做领域建模。没有足够的时间、资源和精力去做这件事
  2. 如果项目团队以前没有做过DDD的话,他们的经验不是很丰富

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/

相关文章: