> 为了让项目更加方便检测出代码规范的问题，我们在项目中使用的是阿里的规范（详细可以看https://github.com/alibaba/p3c 这里面的[Java开发手册（嵩山版）.pdf](https://github.com/alibaba/p3c/blob/master/Java开发手册（嵩山版）.pdf)），同时使用 `Alibaba Java Coding Guidelines` 这款插件进行规约扫描



我们先来看下规范当中的目录结构

![](../img/目录结构和规范/阿里应用分层.png)

- 开放 API 层：可直接封装 Service 接口暴露成 RPC 接口；通过 Web 封装成 http 接口；网关控制层等。
- 终端显示层：各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染，JS 渲染，JSP 渲染，移 动端展示等。 
- Web 层：主要是对访问控制进行转发，各类基本参数校验，或者不复用的业务简单处理等。
- Service 层：相对具体的业务逻辑服务层。 
- Manager 层：通用业务处理层，它有如下特征：
  -  1） 对第三方平台封装的层，预处理返回结果及转化异常信息，适配上层接口。
  -  2） 对 Service 层通用能力的下沉，如缓存方案、中间件通用处理。
  -  3） 与 DAO 层交互，对多个 DAO 的组合复用。
- DAO 层：数据访问层，与底层 MySQL、Oracle、Hbase、OB 等进行数据交互。 
- 第三方服务：包括其它部门 RPC 服务接口，基础平台，其它公司的 HTTP 接口，如淘宝开放平台、支 付宝付款服务、高德地图服务等。 
- 外部数据接口：外部（应用）数据存储服务提供的接口，多见于数据迁移场景中。



------

以上是阿里规范当中的目录结构，我们也有自己的目录结构

![](../img/目录结构和规范/应用分层.png)

- VO（View Object）：显示层对象，通常是 Web 向模板渲染引擎层传输的对象。
- DTO（Data Transfer Object）：数据传输对象，前端像后台进行传输的对象，类似于param。
- BO（Business Object）：业务对象，内部业务对象，只在内部传递，不对外进行传递。
- Model：模型层，此对象与数据库表结构一一对应，通过 Mapper 层向上传输数据源对象。
- Controller：主要是对外部访问控制进行转发，各类基本参数校验，或者不复用的业务简单处理等。为了简单起见，一些与事务无关的代码也在这里编写。
- FeignClient：由于微服务之间存在互相调用，这里是内部请求的接口。
- Controller：主要是对内部访问控制进行转发，各类基本参数校验，或者不复用的业务简单处理等。为了简单起见，一些与事务无关的代码也在这里编写。
- Service 层：相对具体的业务逻辑服务层。 
- Manager 层：通用业务处理层，它有如下特征：
  -  1） 对第三方平台封装的层，预处理返回结果及转化异常信息，适配上层接口。
  -  2） 对 Service 层通用能力的下沉，如缓存方案、中间件通用处理。
  -  3） 与 DAO 层交互，对多个 DAO 的组合复用。
- Mapper持久层：数据访问层，与底层 MySQL进行数据交互。 
- Task层：由于每个服务之间会存在定时任务，比如定时确认收货，定时将活动失效等情况，这里面的Task实际上连接的是`xxl-job`（具体可以查看 https://github.com/xuxueli/xxl-job ）进行任务调度。
- Listener：监听 `RocketMQ` 进行处理，有时候会监听`easyexcel`相关数据。



关于`FeignClient`，由于微服务之间存在互相调用，`Feign` 是http协议，理论上是为了解耦，而实际上提供方接口进行修改，调用方却没有进行修改的时候，会造成异常，所以我们抽取出来。还有就是对内暴露的接口，是很多地方都公用的，所以我们还将接口抽取了出了一个模块，方便引用。可以看到`tmerclub-api`这个模块下是所有对内`feign`接口的信息。





## 目录结构

```
tmerclub
├─tmerclub-admin -- 商家、平台接口服务
│  ├─tmerclub-api-admin  -- 店铺、平台对内接口
│  ├─tmerclub-api-auth  -- 授权对内接口
│  ├─tmerclub-api-biz  -- biz对内接口
│  ├─tmerclub-api-flow  -- 数据分析对内接口
│  ├─tmerclub-api-group  -- 拼团对内接口
│  ├─tmerclub-api-im -- 客服对内接口
│  ├─tmerclub-api-marketing  -- 营销活动（套餐、优惠券、分销、满减）对内接口
│  ├─tmerclub-api-order  -- 订单对内接口
│  ├─tmerclub-api-payment  -- 支付对内接口
│  ├─tmerclub-api-product  -- 商品对内接口
│  ├─tmerclub-api-search  -- 搜索对内接口
│  └─tmerclub-api-user  -- 用户对内接口
├─tmerclub-auth  -- 授权校验模块
├─tmerclub-biz  -- tmerclub 业务代码。如图片上传/短信等
├─tmerclub-common -- 一些公共的方法
│  ├─tmerclub-common-cache  -- 缓存相关公共代码
│  ├─tmerclub-common-core  -- 公共模块核心（公共中的公共代码）
│  ├─tmerclub-common-database  -- 数据库连接相关公共代码
│  ├─tmerclub-common-leaf  -- 基于美团leaf的生成id服务
│  ├─tmerclub-common-mongodb  -- mongod相关公共代码
│  ├─tmerclub-common-order  -- 订单相关公共代码
│  ├─tmerclub-common-product  -- 商品相关公共代码
│  ├─tmerclub-common-rocketmq  -- rocketmq相关公共代码
│  └─tmerclub-common-security  -- 安全相关公共代码
├─tmerclub-flow  -- 数据分析服务
├─tmerclub-gateway  -- 网关
├─tmerclub-group  -- 拼团服务
├─tmerclub-im  -- 客服服务
├─tmerclub-marketing  -- 营销活动（套餐、优惠券、分销、满减）服务
├─tmerclub-order  -- 订单服务
├─tmerclub-payment  -- 支付服务
├─tmerclub-product  -- 商品服务
├─tmerclub-search  -- 搜索模块
├─tmerclub-seckill  -- 秒杀服务
└─tmerclub-user  -- 用户服务
└─system-test  -- 测试用例
```
