基于阿里开源的COLA架构和DDD领域驱动设计构建货物运输系统

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事件消息。
    基于阿里开源的COLA架构和DDD领域驱动设计构建货物运输系统

《COLA 4.x架构入门和项目实践》技术专栏首先介绍了COLA框架的使用入门,以及与IDEA开发工具的集成等等;然后基于COLA架构,创建DDD经典示例项目-货物运输系统,详细介绍了DDD领域建模、适配层、应用层、领域层和基础设施层的代码开发、防腐层(ACL)设计与实现、领域事件(Domain Event)入门实践、以及基于Kafka消息中间件的消息发布和订阅等等。内容由浅入深,从开发实战出发,逐步掌握基于COLA架构和DDD领域建模思想构建复杂业务应用系统。

Original: https://www.cnblogs.com/rickie/p/15250941.html
Author: Rickie
Title: 基于阿里开源的COLA架构和DDD领域驱动设计构建货物运输系统

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/553308/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 代码圈复杂度

    回到我们日常的写代码的场景,我们一直在说系统很复杂,那到底什么是系统复杂度呢?最近几天,一直在改项目里别人写的代码,某些方法复杂无注释。怎么才能写的一手可读,可扩展,可维护[注1]…

    技术杂谈 2023年7月11日
    0118
  • 编程中常见的Foo,是什么意思?

    语意不清,学起来心里老是有疙疙瘩瘩的感觉,于是查吧,终于揭开了这两个东西的不正常关系,讲个各个处在闹心中的初学者们听吧。 参考了众多的网络资料,最后,明确的告诉大家,foo和bar…

    技术杂谈 2023年5月31日
    089
  • PHP8.1.10手动安装教程及报错解决梳理

    安装php版本8.1.10:https://www.php.net/distributions/php-8.1.10.tar.gz 易错步骤梳理: 1、安装的版本是php8,因此教…

    技术杂谈 2023年7月11日
    086
  • Spring Ioc源码分析系列–@Autowired注解的实现原理

    Spring Ioc源码分析系列–@Autowired注解的实现原理 前言 前面系列文章分析了一把Spring Ioc的源码,是不是云里雾里,感觉并没有跟实际开发搭上半…

    技术杂谈 2023年7月25日
    097
  • 浅谈分布式事务

    前言应用场景 事务必须满足传统事务的特性,即原子性,一致性,分离性和持久性。但是分布式事务处理过程中, 某些场地比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商…

    技术杂谈 2023年5月31日
    071
  • 自己动手,打造轻量级VSCode/C#环境代替LinqPad

    .Net 的项目都挺重的,一直想找一个轻量级的 CSharp 环境,能像Python那样,选一个文件就能跑的。之前用的是 LinqPad,但它的缺点也很明显: (1) 不付费,自动…

    技术杂谈 2023年6月1日
    083
  • JAVA基础学习第三天!

    精华笔记: 1.运算符: -算术:+、-、*、/、%、++、– -关系:>、 -逻辑:&&、||、! -赋值:=、+=、-=、*=、/=、%= -…

    技术杂谈 2023年7月11日
    099
  • Python获取文件夹下的所有文件名

    1 #获取文件夹内的图片 2 import os 3 def get_imlist(path): 4 return [os.path.join(path,f) for f in o…

    技术杂谈 2023年7月24日
    053
  • SASE

    什么是 SASE? SASE一般读作”sassy”。 安全访问服务边缘简称 SASE,是一种基于云的 IT 模型,它将软件定义的网络与网络安全功能捆绑在一起…

    技术杂谈 2023年5月31日
    094
  • finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?

    参考:《深入理解Java虚拟机》 对于Java而言: 调用时机:当垃圾回收器要宣告一个对象死亡时,至少要经过两次标记过程:如果对象在进行可达性分析后发现没有和GC Roots相连接…

    技术杂谈 2023年5月30日
    097
  • 猪齿鱼数智化开发管理平台1.3.0版本已发布,欢迎试用!

    2022年4月23日,数智化开发管理平台猪齿鱼Choerodon发布1.3.0版本。新增或优化风险管理、钉钉集成、流水线定时触发*等 *多项功能,全面提升团队工作效能!通过提供体系…

    技术杂谈 2023年7月23日
    092
  • 远程桌面提示:身份验证错误 要求的函数不受支持

    今天在远程服务器的时候突然出现这么一个错误提示:身份验证错误 要求的函数不受支持,当时以为是服务器问题,因为我一天起码要远程3台服务器只有这一台出现问题。果断联系服务器管理员报告问…

    技术杂谈 2023年5月31日
    0111
  • 【赵渝强】使用二进制包部署Kubernetes集群

    在一些企业的私有环境中可能无法连接外部的网络。如果要在这样的环境中部署Kubernetes集群,可以采集Kubernetes离线安装的方式进行部署。即:使用二进制安装包部署Kube…

    技术杂谈 2023年7月24日
    0101
  • Web前端开发大系概览 (前端开发技术栈)

    前言 互联网建立50多年了,网站开发技术日新月异,但web前端始终离不开浏览器,最终还是HTML+JavaScript+CSS这3个核心,围绕这3个核心而开发出来大量技术框架/解决…

    技术杂谈 2023年5月31日
    091
  • 单例模式详解

    单例模式详解 1.1单例模式概述 单例模式(Singleton Pattern)指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点,属于创建型设计模式。 1.2单例模…

    技术杂谈 2023年6月21日
    099
  • LeetCode35.搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 …

    技术杂谈 2023年7月24日
    068
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球