为什么说领域驱动设计可以提升软件的质量水平?
领域驱动设计是一套方法论,指导我们将复杂问题进行拆分、拆分出各个子系统间的关联以及是如何运转的,帮助我们解决大型的复杂系统在落地中遇到的问题。
在学习领域驱动设计的过程中我越来越感觉到领域驱动设计可以提升软件的质量水平。这是基于以下2点认识:
1. 领域驱动设计可以是业务知识更早地融入到软件的分析和设计之中
软件是用来解决用户面临的问题,满足用户的需求。而如果软件开发人员不懂得业务知识,就不可能真正理解用户的需求。软件开发人员不能真正理解用户的需求,就不可能开发出让用户满意的软件。
大多数软件项目中,开发人员都没有足够时间收集需求,即使收集了,也会因为缺乏必要的业务知识,使得需求的描述带有“偏见”和逻辑漏洞。而这些“偏见”和“漏洞”往往会在验收测试阶段爆发出来各种Bug。
如果缺乏实际应用软件的业务上下文背景,需求文档就算描述清楚了功能、性能和接口需求,也只是通用业务的抽象表达,这样开发出来的软件即便能够运行,但对用户来说也是无法使用。
关键问题是:软件系统很难做到像建筑行业一样,程序员只要根据图样一步步实施就能完成项目。
领域驱动设计要求开发人员学习业务知识,使用和用户统一的语言,在收集、分析需求以及设计阶段与业务专家、用户一起交流和讨论需求,不断缩小双方的对需求理解的偏差。
领域驱动设计不同于以往的面向对象方法,它消除了建模和代码之间的落差,它将分析和设计完美结合起来,通过引入上下文的特殊性,将项目的真正业务背景和集成复杂性引入设计建模阶段,提高了设计的实用性,减少了软件的变更。
2. 领域驱动设计是复杂软件的解决之道
领域驱动设计是专门解决复杂性的方法论。
领域驱动设计会使用域、子域、界限上下文等工具将一个复杂的问题肢解、拆分成一个个可实现的目标。
大道至简。
领域驱动设计也是以往主流方法学的集大成者,它继承了传统面向对象分析设计方法,比如面向对象的那种更符合人类思考习惯的分析问题方式,划分边界和封装等,同时吸收了函数式编程的数学思维,而且还解决了面向对象分析和设计的割裂状态。
总之,领域驱动设计遵从单一职责、少即是多等设计原则,不断努力降低技术债务,提升软件质量。
这正是:
领域驱动好设计,统一语言先用起
复杂问题变简单,质量提升一定地
参考书目:复杂软件设计之道:领域驱动设计全面解析与实战,作者:彭晨阳,出版社:机械工业出版社