本文为领域驱动设计系列总结的第六篇,主要对领域驱动设计概念做个介绍,本系列领域驱动设计总结主要是在Eric Evans 所编写的《领域驱动设计》 一书的基础上进行归纳和总结。
本文也是领域驱动设计总结系列最后一篇,主要是简单的探讨下,领域驱动设计的落地方式,以及对这整个系列做一个总结。
一 落地方式
首先说结论,我个人认为完整的领域驱动设计在很多公司并没有多少落地的可能。领域驱动设计适合业务比较复杂且业务变化迭代没那么频繁的中大型系统,而很多公司业务迭代非常频繁,并不适合使用领域驱动设计。
同时领域驱动设计作用受细节设计的质量和实现决策的质量影响很大,而且只要有少数几个开发人员没有弄清楚它们,整个项目就会偏离目标,而这对开发人员要求很高,编码能力较强且对领域驱动设计有一定理解。
然而目前国内对领域驱动设计重视程度不够,或者说对业务代码质量和业务代码设计重视程度都比较低,并没有多少比较成熟的落地经验可供分享和沟通。所以想要完全落地是很困难的事情,而且也需要针对现有系统进行改造重构,评估后续业务的发展,确认是否适合使用领域驱动设计。
上述中主要说的是完整的落地领域驱动设计比较困难,日常工作中,我们虽然不能完整的落地领域驱动设计,但也可以借鉴和应用领域驱动设计中的很多思想,比如统一语言,建立业务模型,创建实体和值对象,柔性设计,领域的划分,以及针对大型系统的战略设计三原则上下文,精炼,大型结构等等,这些都可以深入研究并进行借鉴,从而应用到我们日常的业务代码设计中。
比如说开发大的业务需求时,可以通过领域建模的方式加深业务的理解,并且和产品通过模型进行有效的沟通,保持双方理解一致。代码编写时可以适当创建一些领域对象封装业务逻辑。设计代码时也可以参考柔性设计,四层分层结构,将代码设计的更加友好。不同业务系统之间进行交互时也可以运用上下文联系的一些模式进行沟通交互等等。而且在涉及业务系统划分,特别是微服务拆分时,使用领域驱动设计思想也会获得很大的帮助。
所以我们可以学习领域驱动中的设计思想和其中一些比较成熟的模式运用到日常代码开发中,并不一定非要整体运用领域驱动设计开发。但在实际落地的时候一定要注意结合系统业务具体情况,千万不可滥用。
二 总结
本系列总结是针对Eric Evans编写的《领域驱动设计》一书所做的简单读书总结,主要从什么是领域驱动设计、如何运用领域模型、如何构造领域模型、如何发掘深层次模型、如何设计大型系统等几个方面对本书做了一个简单的总结,并结合业内一些领域驱动设计落地方案及部门现状简要的分析了领域驱动设计落地方式。书中有很多精华内容,比如各种上下文联系模式,精炼技巧等等,本文都只是简单介绍并未深入。有兴趣的建议单独去看一下原著,叙述的非常清晰。
领域驱动设计是一种思想,Eric Evans编写的《领域驱动设计》也仅仅只是这种思想的一部分内容。领域驱动设计目前已经发展出来多种架构方式,比如比较出名的有Alistair Cockburn 提出的六边形架构,都是很好地落地方式。
如果想要实际运用领域驱动设计,那只凭本文的理论还远远不够,后面有兴趣的建议再读一下Vaughn Vernon的《领域驱动设计精粹》和 《实现领域驱动设计》。
领域驱动设计思想,并没有统一的实施标准,最终的落地还是需要了解相关思想后,再亲自结合自己的系统去实践和总结,并根据自身业务情况不断进行调整方案,方有成功落地的可能。
主要参考书籍:
1.《领域驱动设计》Eric Evans
2.《实现领域驱动设计》Vaughn Vernon