什么是架构?架构就是对系统中的实体以及实体之间的关系所进行的抽象描述。
先来看一下软件架构的分类。
随着互联网的发展,现在的系统要支撑数亿人同时在线购物、通信、娱乐的需要,相应的软件体系结构也变得越来越复杂。
软件架构的含义也变得更加宽泛,我们不能简单地用一个软件架构来指代所有的软件架构工作。
张建飞将软件架构划分为:业务架构、应用架构、分布式系统架构、数据架构、物理架构和运维架构。
典型的应用架构又包括分层架构;CQRS(Command Query Separation),即命令查询分离;六边形架构,即端口 - 适配器架构;洋葱圈架构等等。
在 COLA 的设计中,他们汲取了经典架构的优秀思想,此外还补充了规范设计和扩展设计,并且使用 Archetype 的方式,将架构固化下来,以便可以快速的在开发中使用。
COLA 的分层是一种改良了的三层架构,主要是将传统的业务逻辑层拆分成应用层、领域层和基础实施层。
在扩展设计中,COLA 有两个重要的概念:
一个是业务身份,是指业务在系统唯一标识一个业务或者一个场景的标志。
另一个是扩展点,即每个业务或者场景都可以实现一个或多个扩展点(ExtensionPoint)。
将业务身份和扩展点组合,就形成了扩展坐标(ExtensionCoordinate),这样就可以从框架层面实现对不同租户,不同业务,不同场景的扩展定制了。整个阿里业务中台正是基于这个思想,实现多业务支撑的。
在规范设计方面,COLA 制定了一些列的规范:包括组件(Module)结构、包(Package)结构、命名等。
在架构思想上,COLA 主张像六边形架构那样,使用端口 - 适配器去解耦技术细节;主张像洋葱圈架构那样,以领域为核心,并通过依赖倒置反转领域层的依赖方向,最终形成如下图所示的组件关系。
纵观上面提到的所有应用架构,不难发现一个共同点,就是“核心业务逻辑和技术细节分离”。
六边形架构、洋葱圈架构以及 COLA 架构的核心职责就是要做核心业务逻辑和技术细节的分离和解耦。
试想一下,业务逻辑和技术细节糅杂在一起的情况,所有的代码都写在 ServiceImpl 里面,前几行代码是做 validation 的事,接下来几行是做 convert 的事,然后是几行业务处理逻辑的代码,穿插着,我们需要通过 RPC 或者 DAO 获取更多的数据,拿到数据后,又是几行 convert 的代码,在接上一段业务逻辑代码,然后还要落库,发消息等等。
再简单的业务,按照上面这种写代码的方式,都会变得复杂,难维护。
因此,应用架构的核心使命就是要分离业务逻辑和技术细节。
让核心业务逻辑可以反映领域模型和领域应用,可以复用,可以很容易被看懂,让技术细节在辅助实现业务功能的同时,可以被替换。
最后我们发现,应用架构的道就是:“让上帝的归上帝,凯撒的归凯撒。”