微服务项目代码结构

微服务项目代码接口

1.微服务代码结构

在实际的微服务开发中,我们常常这样来划分层次

tt-root
├── tt-auth -- 授权服务提供
├── tt-common -- 常用工具封装包
├── tt-gateway --  网关
├── tt-ops -- 运维中心
├    ├── tt-admin -- spring-cloud后台管理
├    ├── tt-develop -- 代码生成
├    ├── tt-resource -- 资源管理
├    ├── tt-seata-order -- seata分布式事务demo
├    ├── tt-seata-storage -- seata分布式事务demo
├── tt-service-provider -- 业务模块
├    ├── tt-desk-provider -- 工作台模块 
├    ├── tt-log-provider -- 日志模块 
├    ├── tt-system-provider -- 系统模块 
├    ├── tt-user-provider -- 用户模块 
├    ├── tt-order-provider -- 订单模块 
├         ├── entity(数据表字段映射实体类包)
├		  ├── dao(数据操作类包)
├		  ├── service(服务操作类包)
├		  ├── api(服务暴露实现类包)
├── tt-service-api -- 业务模块api封装
├    ├── tt-desk-api -- 工作台api 
├    ├── tt-dict-api -- 字典api 
├    ├── tt-system-api -- 系统api 
├    ├── tt-user-api -- 用户api 
├──  └── tt-order-api -- 订单api 
├		  ├── request(请求实体包)
├		  ├── response(返回实体包)
└──		  └── api (服务暴露接口包)

2.包依赖关系

举例:将order分为两个jar,一个是api包,另一个是provider

  • api包:主要存在服务接口的暴露,包括请求实体类和返回实体类,比较纯粹
  • provider包:主要用于服务接口的实现,包括一些逻辑处理,类似我们传统web工程,是一个真正的服务处理工程

其中provider包依赖于api包,api包主要用于对外开放服务接口!

微服务项目代码结构_第1张图片

禁止出现以下依赖

这样子会导致在启动order服务或者user的时候,工程会报jar冲突,工程存在循环依赖的问题!

原因:order-api.jar包依赖user-api.jar然后user-api.jar又依赖order-api.jar,导致循环依赖!
微服务项目代码结构_第2张图片

正确的做法应该是由provider工程来依赖,而不是由api来依赖!
微服务项目代码结构_第3张图片

你可能感兴趣的:(代码整洁之道,java,spring,后端)