概览

COLA-framework的module如下:

cola-common
cola-core
cola-test

用maven-archetype生成的代码例子的module情况:

demo-app
demo-client
demo-controller
demo-domain
demo-infrastructure
start

各module介绍

按照数据流的顺序,分别介绍各moduel的作用,以及代码放置的地方:

xxx-controller:

容易理解,放置所有的`@RestController`;
一般的分包如下:

com.alibaba.xxx.controller

xxx-app:

主要负责获取输入,组装context,做输入校验,发送消息给领域层做业务处理,监听确认消息,如果需要的话使用MetaQ进行消息通知;

一般包含以下这些包:

com.alibaba.sample.command                // CmdExe执行器
com.alibaba.sample.command.query          // QryExe执行器
com.alibaba.sample.command.extensionpoint // 扩展点(接口)
com.alibaba.sample.command.extension      // 扩展(实现)
com.alibaba.sample.command.interceptor    // 各种拦截器@XxxInterceptor
com.alibaba.sample.convertor              // ConvertorI实现
com.alibaba.sample.event.handler          // 事件处理器@EventHandler
com.alibaba.sample.repository             // repository,调用db tunnel
com.alibaba.sample.service                // Service的实现
com.alibaba.sample.validator              // ValidatorI实现
com.alibaba.sample.assembler              // 参数装配器

CmdExe和QryExe依赖Repository;

Repository依赖Tunnel获取Domain数据,依赖Converter来做DO/CO等的转换,依赖DomainEventPublisher来发布事件;
xxx-client
xxx-client应该不是功能独立的层,而是作为COLA-framework中`cola-common`模块的第二方库,什么意思?查看cola-common源码和xxx-client的代码,它们的类型应该是平行对应的。即`xxx-client`包含的代码应该是常见的`Service`的接口Facade,上下文信息`Context`以及dto(`ClientObject`、`DomainObject`、`DomainEvent`、`Cmd`和`Qry`)等。
`xxx-client`的分包情况一般是:

com.alibaba.sample.api                // Service接口
com.alibaba.sample.context            // 一般在拦截器中,请求处理前初始化,上下文在一个请求中会被各层用到
com.alibaba.sample.dto                // Cmd和Qry,一个Cmd就是客户的一个请求;Qry是一种特殊的Cmd,它直接操作Tunnel返回数据
com.alibaba.sample.dto.clientobject   // 用于调用者(controller、RPC、MTop等)与APP之间的数据转换
com.alibaba.sample.dto.domainevent    // 领域事件

xxx-domain

主要是通过领域服务(Domain Service),领域对象(Domain Object)的交互,对上层提供业务逻辑的处理,然后调用下层Repository做持久化处理;

一般包命名如下:

com.alibaba.sample.domain.xxxx            // xxxx表示具体的领域对象名称
com.alibaba.sample.domain.xxxx.entity
com.alibaba.sample.domain.xxxx.factory            

除了领域对象(属性和行为)外,还可以包含相关的枚举类、DomainFactory等;

xxx-infrastructure

主要包含Repository,Config,Common和message,Repository负责数据的CRUD操作,通过Tunnel的抽象概念来屏蔽具体的数据来源,来源可以是MySQL,NoSql,Search,甚至是HSF等;Config负责应用的配置;Common是一写工具类;负责message通信的也应该放在这一层。

可以包含如下一些包:

com.alibaba.sample.common                // 如一些BizCode业务线代码
com.alibaba.sample.common.exception      // 系统异常类,ErrorCodeI的实现
com.alibaba.sample.common.util           // util
com.alibaba.sample.config                // ColaConfig等
com.alibaba.craftsman.tunnel.database    // 数据库tunnel,mybatis Mapper等
com.alibaba.sample.tunnel.database.dataobject    // 数据库tunnel的DO
com.alibaba.craftsman.tunnel.rpc         // rpc tunnel

start

SpringBoot的启动类,入口,读取ColaConfig启动COLA。

总结:各种代码类应该放到合适的位置,使其自明,符合他们所在的分层,各司其职,不能混淆。

alibaba-COLA框架module分析相关推荐

  1. alibaba/COLA 4.0框架 使用记录

    文章目录 背景 COLA框架 开发情况 出现的问题 总结.建议 背景 简介:开发团队之前没用过DDD开发.第一次用https://github.com/alibaba/COLA框架试着做项目,记录一些 ...

  2. 如何保证同事的代码不会腐烂?一文带你了解 Alibaba COLA 架构

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  3. RPC调用框架比较分析--转载

    原文地址:http://itindex.net/detail/52530-rpc-%E6%A1%86%E6%9E%B6-%E5%88%86%E6%9E%90 什么是RPC:  RPC(Remote P ...

  4. RPC调用框架比较分析

    什么是RPC: RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 简言之,RPC ...

  5. jQuery框架总体分析

    From:jQuery框架总体分析 jQuery的功能: 我们日常使用javascript干的最多的事情也就是 1.查找DOM节点 2.然后再对查找到的节点进行操作,例如修改样式 添加事件监听 修改内 ...

  6. 游戏服务器框架概括分析

    游戏服务器框架概括分析 关注公众号 风色年代(itfantasycc) 500G游戏开发资料随便拿! 这篇blog题目涉及的范围真大!以至于在这里需要先写一篇前言把范围缩小.选择写这样一个系列的文章, ...

  7. Android以太网框架情景分析之启动简介

            Android以太网框架情景分析之启动简介 Android网络框架分析系列文章目录: Android P适配以太网功能开发指南 Android以太网框架情景分析之启动简介 Androi ...

  8. ZK框架的分析与应用

    ZK框架的分析与应用 1 ZK框架的引入 1.1 概述 ZK是一套以 AJAX/XUL/Java 为基础的网页应用程序开发框架,用于丰富网页应用程序的使用界面.最大的好处是,在设计AJAX网络应用程序 ...

  9. Android以太网框架情景分析之NetworkFactory与NetworkAgent深入分析

    Android以太网框架情景分析之NetworkFactory与NetworkAgent深入分析 Android网络框架分析系列文章目录: Android P适配以太网功能开发指南 Android以太 ...

最新文章

  1. 计算机专业推荐表自我介绍,就业推荐表-自我介绍
  2. 强化学习核心文章一百篇
  3. 第7章 C控制语句:分支和跳转
  4. Elasticsearch(三) 使用kibana 操作ES
  5. python 编辑距离_python实现编辑距离edit distance
  6. TrueNAS SCALE是什么
  7. 卷积神经网络的前世今生
  8. ASP.NET AJAX的客户端框架是鸡肋?
  9. 智能硬件无线通信协议的那些事儿(一)
  10. 浅析百度搜索引擎白皮书
  11. 质心公式_卢瑟福散射公式
  12. 《电路》邱关源 思维导图 第二章 电阻电路的等效变换
  13. 云更新服务器更新不了最新游戏,云更新游戏更新自动/手动更新游戏教程
  14. 禁止spotlight索引外置硬盘或者网络硬盘
  15. 2021-08-16记一次无意发现正方教务系统的bug
  16. ‘∞‘ is not a valid numeric or approximate numeric value
  17. c语言 is函数,关于C语言回调函数的详解~
  18. Javascript(BOM)浏览器对象 2017-08-01
  19. 想要下载文章 但没有权限?——试试去文献对应的期刊官网碰碰运气
  20. rl滤波器原理_滤波电路基本原理

热门文章

  1. 物联网云平台都有哪些分类
  2. win10同步服务器文件夹在哪,win10系统一键同步win 10文件夹视图的操作方法
  3. 怎么用python编写程序计算标准差_自学生信Python(第五天)|如何计算标准差?...
  4. 个人总结-oracle查询锁表、解锁语句
  5. 嵌入式C语言编程规范
  6. JAVA常见的命名规则:见名知意
  7. M1 Mac安装 PS 2021 闪退、卡启动界面该怎么解决
  8. 很经典的十五句话,从别人的blog上看来的!
  9. zynq petalinux编译系统启动文件实战应用
  10. 004-如何用PS把彩色图片设置成黑白图片?