我是DDD的新手,正在考虑在我的项目中使用这种设计技术。
然而,DDD让我印象深刻的是这个想法有多么基本。与其他设计技术(如MVC和TDD)不同,它似乎没有包含任何突破性的想法。
例如,我相信你们中的一些人会有同样的感觉,根聚合和存储库的想法并不新鲜,因为当你在编写MVC Web应用程序时,你必须拥有一个主对象(即根目录)聚合)包含模型层中的其他次要对象(即值对象和实体),以便将数据发送到强类型视图。
对我而言,DDD中唯一的新想法可能是
有谁可以告诉我,如果我错过了这里的任何东西? 如果这就是DDD的全部内容,如果我用上述2个新想法更新我现有的MVC应用程序之一,我可以声称它是TDD,MVC和DDD应用程序吗?
答案 0 :(得分:14)
简短的回答是,不是你的代码看起来像是DDD项目,它是你如何达到该代码。现在是长版......
对于DDD编码实践没有任何革命性的东西,你是完全正确的,但你似乎对你的问题有点偏离目标。许多开发人员使用DDD的一个常见错误是过多地关注编码实践,而忽略了DDD的一些更基本的概念。 DDD的核心是通过开发人员和领域专家之间的密切合作来迭代开发模型。您可以编写所需的所有服务,实体和值对象,但如果您没有在过程中涉及域专家,或者没有通过迭代改进模型,那么坦率地说,您不是在练习DDD。即使从编码的角度来看,许多人认为聚合根,有界上下文和反腐败层的概念比基本模式更有价值。
你并不是唯一一个了解DDD的人。我发现几乎所有的开发人员都经历了一个DDD阶段,他们试图使用实体,价值对象和服务来实现样本应用程序,同时忽略所有其他对DDD至关重要的实践。 DDD是一个旨在处理复杂业务逻辑的流程,因此判断一个周末开发的示例应用程序的优点并不能让您获得DDD提供的最佳功能。我敦促你继续深入研究DDD,因为我发现它是一个不可或缺的工具,但永远不要忘记它不仅仅是一种模式语言。
答案 1 :(得分:7)
DDD并不是一个真正的清单 - 这是一种方法论。
除了Stefans的答案,我还建议如下(按重要性顺序):
然后还有其他所有东西!
我认为大多数DDD从业者都想说:
“我与领域专家一起了解他们的需求,并编写(a)与企业条款和流程相匹配的系统,(b)帮助其他开发人员了解业务领域,以及(c)可以灵活地适应改变业务需求。“
希望有所帮助!