1 DDD 是什么?
DDD 是畛域驱动设计,是 Eric Evans 于 2003 年提出的,离当初有 17 年。
2 为什么须要 DDD
当软件越来越简单,理论开发中,大量的业务逻辑沉积在一个巨型类中的例子不足为奇,代码的复用性和扩展性无奈失去保障。为了解决这样的问题,DDD 提出了清晰的分层架构和畛域对象的概念,让面向对象的剖析和设计进入了一个新的阶段,对企业级软件开发起到了微小的推动作用。
2.1 POP,OOP,DDD 是如何解决问题
面向过程编程(POP),接触到需要第一步思考把需要自顶向下分解成一个一个函数。并且在这个过程中思考分层,模块化等具体的组织形式,从而合成软件的复杂度。当软件的复杂度不是很大,POP 也能失去很好的成果。
面向对象编程(OOP),接触到需要第一步思考把需要分解成一个一个对象,而后每个对象增加一个一个办法和属性,程序通过各种对象之间的调用以及合作,从而实现计算机软件的性能。跟很多工程办法一样,OOP 的初衷就是一种处理软件复杂度的设计办法。
畛域驱动设计(DDD),接触到需要第一步思考把需要分解成一个一个问题域,而后再把每个问题域分解成一个一个对象,程序通过各种问题域之间的调用以及合作,从而实现计算机软件的性能。DDD 是解决简单中大型软件的一套卓有成效形式,现已成为支流。
2.2 POP,OOP,DDD 的特点
POP,无边界,软件复杂度小实用,例如“盖房子”。
OOP,以“对象”为边界,软件复杂度中实用,例如“盖小区”。
DDD,以“问题域”为边界,软件复杂度大实用,例如“盖城市”。
3 DDD 的分层架构和形成因素
3.1 分层架构
整个架构分为四层,其外围就是畛域层(Domain),所有的业务逻辑应该在畛域层实现,具体形容如下:
用户界面 / 展示层 ,负责向用户展示信息以及解释用户命令。
应用层 ,很薄的一层, 用来协调利用的流动。它不蕴含业务逻辑。它不保留业务对象的状态, 但它保有利用工作的进度状态。
畛域层 ,本层蕴含对于畛域的信息。这是业务软件的外围所在。在这里保留业务对象的状态, 对业务对象和它们状态的长久化被委托给了基础设施层。
基础设施层 ,本层作为其余层的撑持库存在。它提供了层间的通信, 实现对业务对象的长久化, 蕴含对用户界面层的撑持库等作用。
3.2 形成因素
实体(Entity),具备惟一 ID,可能被长久化,具备业务逻辑,对应事实世界业务对象。
值对象(Value Object),不具备惟一 ID,由对象的属性形容,个别为内存中的长期对象,能够用来传递参数或对实体进行补充形容。
畛域服务(Domain Service),为上层建筑提供可操作的接口,负责对畛域对象进行调度和封装,同时能够对外提供各种模式的服务。
聚合根(Aggregate Root),聚合根属于实体对象,聚合根具备全局惟一 ID,而实体只有在聚合外部有惟一的本地 ID,值对象没有惟一 ID
工厂(Factories),次要用来创立聚合根,目前架构实际中个别采纳 IOC 容器来实现工厂的性能。
仓储(Repository),封装了基础设施来提供查问和长久化聚合操作。
4 小结
通过本文介绍,咱们理解 DDD 是为解决软件复杂性而诞生,与 OOP 最大的区别就是划分边界的形式不一样,所以 DDD 自身把握起来并不会感觉简单,DDD 其实是钻研将蕴含业务逻辑的 ifelse 语句放在哪里的学识。