1.外部认可度好【可推广】

1.1 github数据

star 7.7k,forks 2.1k
image.png

1.2 COLA 作为应用架构被选入阿里云的Java应用初始化的应用架构选项之一

image.png

2.架构设计

2.1 【架构设计好】架构图一览

里面涉及的图均来自:

分层情况如下图:
image.png

  • 与 DDD 架构类似 ,也是四层,只不过命名稍有不同
  • 利用依赖倒置,抽出了 gateway , 将 Domain 作为核心,基础设施层依赖 Domain 层

整体组件架构如下图:
image.pngimage.png

  • 分为 COLA 架构 和 COLA 组件 【组件可选,不强迫使用】
  • 给出了明确的落地架构,可以直接用(还提供了 maven 模版)

对分包明确提出了:横向和纵向
image.png

2.2 【有退路】Domain 层非必选

来源:https://blog.csdn.net/significantfrank/article/details/123267395

Domain层设计是开放的

  • App可以绕过Domain层直达Infrastructure
  • 当你的团队实在hold不住DDD的时候,可以选择退化到老的三层架构
  • 先把App做厚,再把App做薄

    我们先可以把业务逻辑都写到App里面,在写的过程中,我们会发现有一些业务逻辑,不仅仅是过程式的代码,它也是领域知识(Domain knowledge),应该被更加清晰、更加内聚的表达出来,那么我们就可以把这段代码沉淀为领域能力

2.3 【开发范式好】上下结合跨越鸿沟 : 相对正确的落地DDD工程的开发范式

  1. 梳理业务:梳理业务流程,挖掘领域概念,形成统一语言。

  2. 战略设计:划分领域边界,建立限界上下文。

  3. 战术设计:寻找实体,建立关系,形成领域模型。

  4. API设计:根据用户故事,输出服务功能API。

  5. 做厚App:根据API功能要求,在App层编写业务过程代码。

  6. 做薄App:以领域模型为基础,优化过程代码,沉淀领域能力和领域知识,让业务语义显性化,做到Knowledge Rich Design (知识丰富的设计)。

  7. 技术细节:完善技术细节代码,比如API的暴露方式(RPC 或者 Restful),数据的存储方式(关系数据库 或者 NoSQL),ORM框架的选用(MyBatis 或者 JPA)等等。



好的Domain层,不仅仅需要设计,更是在开发过程中,循环迭代沉淀出来的。用一句话来形容这个过程就是:自上而下的结构化分解,自下而上的抽象建模,循环迭代沉淀领域能力
image.png