软件架构设计分层模型和构图思考( 三 )


传统业务逻辑层实现往往是一个数据对象对应一个DAO,一个Service和一个Interface 。而领域模型下DAO可以是分开的,但是Service逻辑层往往则更多应该按领域模型思路对DAO层的能力进行组装和聚合 。
独立应用层拆分

软件架构设计分层模型和构图思考

文章插图
 
在我原来理解里面,领域层提供领域模型和领域服务能力接口,而应用层更多的是对领域层多个领域对象模型提供的服务能力进一步进行组装和编排,然后再暴露给前端应用 。
谈到应用层的概念,实际上可以理解为前端应用中存在的共性能力的进一步下沉 。即应用本身只是用户业务功能实现的承载,但是这个功能的实现可以通过多种前端展现形式,比如传统的CS桌面应用,BS应用,或手机端APP 。
在电商里面,一个商品订购就是一个独立的应用,用户可以在APP完成,也可以在BS端完成,但是不论在哪里完成最终应用层提供的能力都应该一样 。比如完成一个商品订购需要同时和底层的订单,库存,支付多个服务进行交付和协同 。那么这个逻辑显然不适合同时在BS端应用和APP端应用中进行重复编写和开发 。那么这个内容就应该在应用层实现 。
如果回到微服务和中台架构下,这个应用层拆分更加必要,即通过应用层来下沉共性的服务组合和组装逻辑,这个逻辑和协同不应该属于任何一个前端应用 。
界面层还是接口层
在开发一个聚合能力的中台微服务模块的时候,可以看到这个微服务模块本身并没有界面展现层,那么该微服务的最上层仅仅是提供API接口的接口服务层 。
该API接口服务能力既可以提供给APP前端,也可以提供给BS端使用 。
软件技术架构分层软件技术架构构图,分层仍然可以沿用软件三层分层模型,重点是说明清楚各层用到的关键技术组件或技术服务能力 。比如软件开发三层模型的技术架构分层如下:
软件架构设计分层模型和构图思考

文章插图
 
如果本身就是一个技术平台,类似大数据平台,那么我们在整体构图的时候仍然需要考虑先进行分层,再详细说明每层里面的技术内容 。
比如对应一个大数据平台,包括了大数据采集,大数据存储,大数据处理,大数据分析和应用,那么这个就是关键的分层,可以基于这个分层再来考虑各层采用的关键技术 。
软件架构设计分层模型和构图思考

文章插图
 
对于技术栈构图基本也可以参考技术架构构图模式进行 。
软件架构设计分层模型和构图思考

文章插图
 
技术架构重点需要回答的就是你在进行软件架构设计过程中,究竟会用到哪些关键技术,哪些开源产品或工具等 。可以细化到具体的技术产品,也可以仅细化到产品类型 。
比如消息中间件,你可以细化到采用RabbitMQ,也可以在技术架构中只体现采用消息中间件 。
技术架构和软件功能分层架构唯一相同的就是分层,技术架构在各个分层里面都没有具体的业务功能点和实现内容,仅仅是关键技术点说明 。
单个应用功能架构注意应用功能架构完全是重点描述应用系统具备哪些功能,一个功能究竟是采用什么三层技术架构实现并不用关心 。因此功能架构不应该体现数据层,逻辑层,技术点这些内容 。
那么对于一个应用系统的功能如何分层?
我们可以参考业务分层分类,将业务分为基础支撑层,执行层,决策管理层 。这样基本的分层模式就出来了,基于该方式可以完成一个功能架构构图 。
软件架构设计分层模型和构图思考

文章插图
 
对于单个应用来说一般不会自身有云平台,PaaS平台这类概念 。但是单个应用构建一定存在共性技术支撑平台能力,比如有自己的流程管理,各自共性技术功能组件等 。因此单应用构建还可以采用基础技术支撑层+应用层+门户层的方式进行构图 。
在应用层再按具体的业务域或业务阶段进行进一步细分 。
软件架构设计分层模型和构图思考

文章插图
 
架构图的分层构图逻辑
软件架构设计分层模型和构图思考

文章插图
 
在前面基本给出了不同类型的架构图的核心分层逻辑,可以看到在画架构图的时候尽量不要混合使用不同场景下的构图方式,否则就导致整体架构图混乱 。


推荐阅读