DDD适合各种应用吗?

时间:2012-08-06 08:03:49

标签: domain-driven-design ddd-repositories

我在这里和其他论坛上看到的很多问题的一个常见反应是“你不需要为此做DDD。它是一个简单的CRUD应用程序,DDD是一个过度工程”。

我是DDD的新手,我觉得DDD中有很多元素具有普遍的吸引力,可以全面使用,无论你的应用程序是否复杂,都要求DDD。例如,应用程序的分层,DDD识别的不同工件等等。可能从基础知识开始,然后承认贫血模型,然后工作/重构尽可能多的纯度。

这种方法听起来不错吗? 或者你会说在每个应用程序的设计中有一个基本的选择,无论是否采用DDD方式,都是“全有或全无”的选择?

更新 (提供更多背景信息,以回应下面的hugh评论)
我正在围绕现有的RuleEngine应用程序构建一个webapp,基本上是CRUD和一些验证,不变量,然后是部署过程。规则创作和语义检查由一段独立的代码完成,我将其作为CRUD的一部分调用,并且我的代码中没有任何语义特定的逻辑。我正在尝试将DDD用于此应用程序,但我发现它可能不够复杂到适合DDD范例。没有为该域定义普遍存在的语言,即除了命名所涉及的实体集之外,该语言还不够专业。我听说我的领域专家在创建,编辑和删除实体方面发言。

3 个答案:

答案 0 :(得分:5)

DDD不是全有或全无。此外,DDD中描述的许多模式并不是新的,可以在任何地方找到。 Eric Evans(DDD书籍的作者)刚刚组装了它们,在需要的地方将它们正式化,并将它们相互关联起来。您可以自由使用适合您的问题空间。

经常被忽视的内容:DDD描述了实现模式以及分析模式。分析模式在许多(如果不是大多数)应用程序中可能过度,但实现模式(即实体规范服务)可以是在不太复杂的场景中也很有用。

答案 1 :(得分:2)

简而言之,

如果只是CRUD,我就不会打扰了。

另一方面,

如果它有行为,下一个状态依赖于之前的状态,那么你可能想要考虑DDD。

答案 2 :(得分:0)

DDD方法基于两种类型的模式:战略模式和战术模式。恕我直言,在您确定会有所帮助的每种情况下,请自由使用战术模式。但是,对于某些类型的域,使用战略模式可能会显得过大。如果CRUD风格的思维在建模过程中没有负面影响,那么您肯定不需要它。