DDD为什么重要?
1、软件的本质是什么
软件的最终目的是增进一个特定的领域。为达到这个目的,软件需要和它服务的领域和谐相处。为此,软件要成为领域的映射。软件需要具现领域内重要的核心概念和元素,并精确实现他们的关系。软件需要对领域进行建模。
未加工的领域知识难以加工成软件构造,除非建立一个抽象,经过不断的努力我们会让抽象越来越清晰,这个抽象就是领域模型。领域模型不是领域专家头脑里面的知识,而是一个经过严格组织并能经过选择性抽象的知识。
我们需要通过模型来交流,为此1模型图形化,2模型语言化
2、如何做软件设计
软件设计和代码设计不一样的,前者类似构建房子的架构,后者类似在墙上定位油画
瀑布开发,业务专家将需求传递给业务分析人员,业务分析人员基于需求来建模,并传递给开发人员,开发人员由此进行编码,知识是单向的。业务专家得不到业务分析人员的反馈,业务分析人员也得不到开发人员反馈。
敏捷开发,预先很难确定所有需求,要先预先创建一个覆盖所有需求的模型很难,敏捷开发反对预先设计,通过业务涉众持续参与迭代开发和重构,开发团队更多的学习客户的领域知识,从而产出客户所需的软件。问题是害怕做深度、彻底的设计。
领域驱动设计结合了设计和开发实践,协同工作创造出一个更好的解决方案。