COLA 是 Clean Object-Oriented and Layered Architecture的缩写,代表“整洁面向对象分层架构”,是来自阿里技术专家的开源项目。目前COLA已经发展到COLA 4.0。
COLA既是框架,也是架构。COLA架构融合了常见的DDD代码模型,可以帮助开发人员快速实践并落地DDD领域建模的应用项目。
货物运输系统(Cargo Tracker Application)是领域驱动设计(DDD)的经典示例。Eric Evans(DDD之父)在他的书中引入了货物运输系统为示例,Eric这样描述该领域模型:
-
一个Cargo(货物)涉及多个Customer(客户,如托运人、收货人、付款人),每个Customer承担不同的角色;
-
Cargo的运送目标已指定,即Cargo有一个运送目标;
-
由一系列满足Specification(规格)的Carrier Movement(运输动作)来完成运输目标;
上述这段描述完全以货物为中心,把客户看成是货物在某个场景中可能会涉及到的关联角色,如货物会涉及到托运人、收货人、付款人;货物有一个确定的目标,货物会经过一系列的运输动作到达目的地;其实,以用户为中心来思考领域模型的思维只是停留在需求的表面,而没有挖掘出真正的需求的本质;我们在做领域建模时需要努力挖掘用户需求的本质,这样才能真正实现用户需求。
下图是货物运输系统的整体概览图,分为四个微服务:
-
预订微服务 bookingms:该服务负责与货物委托预订相关的所有操作,包括包裹预订、查询包裹明细、包裹行程制订(Assign Route to Cargo)等等,还有发布CargoBookedEvent和CargoRoutedEvent领域事件,以及订阅CargoHandledEvent事件消息等等。
-
运输微服务routingms:该服务负责与货物路线相关的所有操作,包括获取路线的行程、维护航线(Maintain Voyages)等等。
-
跟踪微服务trackingms:该服务负责与货物跟踪相关的所有操作,包括为货物分配运单号(TrackingNumber)、跟踪货物路线,还有订阅CargoRoutedEvent和CargoHandledEvent事件消息。
-
装卸微服务handlingms:该服务负责与货物装卸相关的所有操作,包括注册装卸活动(Register Handling Activity)、查询装卸活动历史记录等等。
《COLA 4.x架构入门和项目实践》技术专栏首先介绍了COLA框架的使用入门,以及与IDEA开发工具的集成等等;然后基于COLA架构,创建DDD经典示例项目-货物运输系统,详细介绍了DDD领域建模、适配层、应用层、领域层和基础设施层的代码开发、防腐层(ACL)设计与实现、领域事件(Domain Event)入门实践、以及基于Kafka消息中间件的消息发布和订阅等等。内容由浅入深,从开发实战出发,逐步掌握基于COLA架构和DDD领域建模思想构建复杂业务应用系统。