1.Halo Framework概述
Halo Framework是将DDD,洋葱架构,整洁架构,读写分离架构有机整合一起,基于业务身份+扩展点的设计思想,采用应用内部流程编排的方式形成可复用的业务资产库。最终架构落地达到业务与业务隔离,业务与平台隔离,管理域与运行域分开,帮助企业快速落地业务中台。
Halo设计原则简单,即在高内聚,低耦合,可扩展,易理解的指导思想下,尽可能的贯彻面向对象的设计思想和领域驱动设计的原则。
Halo Framework是基于DDD+CQRS+扩展点的应用框架,业务系统使用之自带光环!
2. Halo主要模块
Halo Framework的主要模块如下所示:
halo-cqrs:读写分离架构-所有请求封装为命令对象,通过Command Bus分发到命令处理器执行,通过Event和Event Bus等实现读写分离。
halo-ddd: 根据领域驱动设计思想,自定义注解
@Entity(实体)
,@Factory(工厂)
,@DomainService(领域服务)
,@ValueObject(值对象)
,@DomainRepository(资源库)
,@DomainAbility(域能力)
等进行战术设计,落地DDD,实现业务与业务
隔离。Halo Admin: 中台可视化管控平台,全链路可视化视角,对业务资产进行可视化。
Halo Boot: 基于Spring Boot定制的Starter。包含Halo Web,Halo Swagger,Halo ES6,Halo Job,Halo Test,Halo MyBatis等
halo-extension:基于扩展点的设计思想,自定义
@ExtensionPoint(扩展点注解)
和@Extension(扩展注解)
, 实现平台和插件
隔离。halo-flow: 基于流程编排思想,开发业务组件,编排应用内部已有业务资产,快速响应前台需求,久而久之形成大量可复用的业务组件库。
Halo ToolKit: 一款IDEA插件,只为加速Halo应用开发而生。
Halo Codegen: 通过设计代码生成器, 快速生成最佳实践的基础代码和规范,提高开发效率和生产力,让业务开发人员专注于业务开发。
Halo Plugin: Halo生态体系中的Gradle或Maven插件。
Halo Check:基于Git Hook+JGit+CheckStyle+PMD对代码增量diff Check是否满足Halo Style。该项目主要用于Git Commit提交的时候对代码进行检查。分为客户端和Gitlab服务端Check 。
3. Halo Framework设计
4.1 Halo Framework设计思想
Halo框架的主要思想是 流程组合节点
,节点调用域服务
,域服务包含若干域能力
,域能力下若干个业务扩展
。
业务包与平台分离的插件化架构: 平台提供插件包注册机制,实现业务方插件包在运行期的注册。业务代码只允许存在于插件包中, 与平台代码严格分离。业务包的代码配置库也与平台的代码库分离,通过二方包的方式,提供给容器加载
全链路统一的业务身份:
平台需要能有按“业务身份”进行业务与业务之间逻辑隔离的能力,而不是传统SPI架构不区分业务身份, 简单过滤的方式。如何设计这个业务身份,也成为业务间隔离架构的关键。管理域与运行域分离: 业务逻辑不能依靠运行期动态计算,要能在静态期进行定义并可视化呈现。 业务定义中出现的规则叠加冲突,也在静态器进行冲突决策。在运行期,严格按照静态器定义的业务规则、冲突决策策略执行。
4.2 Halo架构
对外的一切请求交互调用,全部适配为命令。命令进入应用层服务->域服务->域能力。域能力基于接口的方式调用基础设施层的服务。如下图所示: