1.外部认可度好【可推广】
1.1 github数据
star 7.7k,forks 2.1k
1.2 COLA 作为应用架构被选入阿里云的Java应用初始化的应用架构选项之一
2.架构设计
2.1 【架构设计好】架构图一览
里面涉及的图均来自:
分层情况如下图:
- 与 DDD 架构类似 ,也是四层,只不过命名稍有不同
- 利用依赖倒置,抽出了 gateway , 将 Domain 作为核心,基础设施层依赖 Domain 层
整体组件架构如下图:
- 分为 COLA 架构 和 COLA 组件 【组件可选,不强迫使用】
- 给出了明确的落地架构,可以直接用(还提供了 maven 模版)
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工程的开发范式
梳理业务:梳理业务流程,挖掘领域概念,形成统一语言。
战略设计:划分领域边界,建立限界上下文。
战术设计:寻找实体,建立关系,形成领域模型。
API设计:根据用户故事,输出服务功能API。
做厚App:根据API功能要求,在App层编写业务过程代码。
做薄App:以领域模型为基础,优化过程代码,沉淀领域能力和领域知识,让业务语义显性化,做到Knowledge Rich Design (知识丰富的设计)。
技术细节:完善技术细节代码,比如API的暴露方式(RPC 或者 Restful),数据的存储方式(关系数据库 或者 NoSQL),ORM框架的选用(MyBatis 或者 JPA)等等。
好的Domain层,不仅仅需要设计,更是在开发过程中,循环迭代沉淀出来的。用一句话来形容这个过程就是:自上而下的结构化分解,自下而上的抽象建模,循环迭代沉淀领域能力。