COLA架构学习

关于云智磅

云智磅ERP是一款钉钉上架应用,中小企业ERP,主要功能包括:商城、订单、过磅、质检、结算、报表等。2020年开通试用656家,主要客户来源是钉钉平台。
团队是8个人的小团队,4个后端、2个前端、1个产品、1个客服。
产品主要是线上SaaS模式,技术要求高可用、分布式,避免出现单点故障。

存在的问题

上线初期是单jar包运行在两个服务器中,通过阿里负载均衡服务做负载均衡,架构采用三层架构(controller、service、dao),代码混乱,学习成本高,沟通困难,经常改一个bug会出现另外一个bug。

阿里COLA

标准化是指在经济、技术、科学和管理等社会实践中,对重复性的事物和概念,通过制订、发布和实施标准达到统一,以获得最佳秩序和社会效益。

软件开发是多人协作的,代码编写比较随意是最大的问题,COLA架构做了一个很好的标准化思路。

一个没有架构的应用系统,就像一堆随意堆放、杂乱无章的玩具,只有熵值,没有熵减。而一个有良好架构的应用系统,有章法、有结构,一切都显得紧紧有条。 —张建飞

架构演进

1. 加入domain。

COLA架构学习_第1张图片
Service多为单例,不具备属性和行为,为了让代码容易理解,加入多例的Domian。

2. 加入更多功能。

增加了AMQP消息,接收物联网平台数据。云端调用设备的iot服务。调用其他Rest微服务。终究还是变成一锅粥。
COLA架构学习_第2张图片
这时碰到了COLA架构,当时是3.0版本,进行了拆解学习。
COLA架构学习_第3张图片

对于一个典型的业务应用系统来说,COLA会做如下层次定义,每一层都有明确的职责定义:
1)适配层(Adapter
Layer):负责对前端展示(web,wireless,wap)的路由和适配,对于传统B/S系统而言,adapter就相当于MVC中的controller;

2)应用层(Application
Layer):主要负责获取输入,组装上下文,参数校验,调用领域层做业务处理,如果需要的话,发送消息通知等。层次是开放的,应用层也可以绕过领域层,直接访问基础实施层;

3)领域层(Domain Layer):主要是封装了核心业务逻辑,并通过领域服务(Domain Service)和领域对象(Domain
Entity)的方法对App层提供业务实体和业务逻辑计算。领域是应用的核心,不依赖任何其他层次;

4)基础实施层(Infrastructure
Layer):主要负责技术细节问题的处理,比如数据库的CRUD、搜索引擎、文件系统、分布式服务的RPC等。此外,领域防腐的重任也落在这里,外部依赖需要通过gateway的转义处理,才能被上面的App层和Domain层使用。

过磅业务模块长这样

COLA架构学习_第4张图片

  1. 适配器层主要功能是接收外部请求。包含rest请求及amqp消息。这里代码越少越好,主要是为了调用App层Service方法。
  2. 二方库和app可以看成一个层,一个放接口和dto对象,一个是接口实现及转换Converter,用来转换dto到domain。maven中app没有依赖domain的原因,app直接依赖基础设施层,基础设施层依赖domain,这样app就间接依赖domian。WebSocket服务暂时放到这一层,进行消息收发。
  3. 领域层是多例的,中间不要调用new实例化实体和vo,都应该由app层完成上下文组装。领域对象有属性、行为、事件。领域层存放gateway、service接口及事件对象,方便调用,这里是多例的,不能通过@Autowired自动注入,需要用getBean方式。
  4. 基础设施层包含mapper,DataObject对象,Converter对象(转换domain到DataObject对象)。
    小城市,小产品,小梦想。

你可能感兴趣的:(架构,java,spring,设计模式,物联网)