DDD 领域驱动设计

DDD 领域驱动设计

携程领域驱动设计实践

参考自携程技术公众号 《后微服务时代,领域驱动设计在携程国际火车票的实践》

MVC 这种软件架构中模型层只关注数据,控制层只关注行为,随着迭代的不断演化,业务逻辑越来越复杂,便会导致整个控制层的代码量越来越多,而模型层和视图层的变更却很少,最终导致整个控制层变得十分臃肿,从而失去了分层的意义。

失血模型

失血模型是指领域对象里只有 getset 方法的 POJO,所有业务逻辑都不包含在内而是放在控制层中,该模型对象的缺点就是不够面向对象,对象只是数据的载体,几乎只做传输介质之用,它是没有生命、没有行为的。

与失血模型相对应的就是充血模型,充血模型就是会包含此领域相关的业务逻辑等,同时也可以包含持久化操作,它的优点对象自洽程度很高,表达能力很强,可复用性很高,更加符合面向对象的思想。

业务逻辑逐渐复杂后,采用失血模型会导致业务逻辑状态散落在大量的方法中,使得代码的意图渐渐不够明确,代码的复用性下降。

架构设计

DDD 有多种分层架构模式,包括四层架构模式、五层架构模式、六层架构模式等,其核心均是定义一层领域层对领域对象及其关系进行建模,从传统的 MVC 三层架构中将领域抽出,本文采用的是一种改进的分层架构模型:六边形架构,其结构如下所示:

通过 DDD 思想进行建模,并采用 DDD 的六边形架构,重构后的服务结构如下: