MVC 三层结构

xxx-app

  • xxx-common
  • xxx-entity
  • xxx-dao
  • xxx-service
  • xxx-web
  1. xxx-common & xxx-entity 可能存在需要相互引用的情况,如果发生这种情况,相应的代码就只能写到 xxx-web,common & entity 分层也就么有了意义
  2. dao 作为 本项目中的底层对数据库的操作模块,本身并不会被其它app 调用,只是作为 service-impl 的部分组成
  3. service 作为对外提供服务的模块,在目前的模式之下,service 会引入 common, entity, dao等,对其它项目依赖不友好,甚至引起各种依赖冲突问题
    1. 在开发模式下,使用 SNAPSHOT 版本,如果只引入 service , 但是由于service 底层依赖 common, entity 等模块,RELEASE 优先级高于 SNAPSHOT ,此时需要引入 再次引入common, entity 注入真正需要的版本
  4. service 层的建议,只包含 api 定义,以及部分 DTO, VO, Enum, 做到轻量级对外提供;同时对其他项目友好,不会引发诸如依赖冲突等问题

一个相对友好的实践结构

一个个人建议的项目结构:

xxx-app

  • xxx-service-api
    • com.xxx.业务名称.service.api
      • XXXRpc/XXXService
    • com.xxx.业务名称.vo // 响应结果
    • com.xxx.业务名称.dto/request // 数据传输/请求对象
    • com.xxx.业务名称.enumeration // 枚举

// vo,dto/request,enumeration 仅为接口定义中包含的,不需要对外暴露的部分,依然在service里面

  • xxx-service
    • com.xxx.业务名称.config
    • com.xxx.业务名称.controller
    • com.xxx.业务名称.service
    • com.xxx.业务名称.core
      • com.xxx.业务名称.core.model // 数据库实体
      • com.xxx.业务名称.core.enumeration
      • com.xxx.业务名称.core.vo
      • com.xxx.业务名称.core.dto
    • com.xxx.业务名称.model/bean // 数据库实体 与 com.xxx.业务名称.core.model 二选一
    • com.xxx.业务名称.util
    • com.xxx.业务名称.

xxx-service-api 为轻量级的对外接口定义,包含接口

COLA 分层架构

COLA架构图

image.png

COLA层次关系和依赖关系图

image.png

传统的分层架构与COLA分层架构

image.png

COLA 项目结构

image.png

image.png

image.png