> For the complete documentation index, see [llms.txt](https://taocares.gitbook.io/development-guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://taocares.gitbook.io/development-guide/kai-fa-zhi-nan/dai-ma-fen-ceng.md).

# 代码分层

代码核心分为三层：请求处理层、业务逻辑层和数据持久层。

对于采用消息驱动设计的系统，需要引入消息处理层；对于需要远程调用其他服务的系统，需要引入远程调用层，负责远程调用或接口适配等工作。

## 代码分层示意图

![代码分层示意图](https://3950606389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LOb2T06rcgIfWdtJNdK%2F-LOuccwUZXRb-A_jydcP%2F-LOue85ixBEkuXtNh6oK%2Fimage.png?alt=media\&token=7abbdaf1-2682-48b4-903d-1d41dfa1e861)

{% hint style="info" %}
图中默认上层依赖于下层，箭头关系表示可直接依赖，如：消息处理层可以依赖于 业务逻辑层，也可以直接依赖于数据持久层，依此类推。其中黄框表示需要根据情况引入事务管理。
{% endhint %}

## 请求处理层（Controller）

对外暴露 RESTful 接口，进行控制转发、参数处理、结果封装、异常处理等。

单条查询时，需要处理业务逻辑层返回的`Optional`对象，获取实际对象或抛出异常。

## 业务逻辑层（Service）

核心业务逻辑处理。根据需要组合数据层、远程调用层等，完成业务逻辑操作，处理实体到DTO的转换，根据需要缓存数据或发送事件通知。&#x20;

简单来说，业务逻辑层承担了除请求处理层和数据持久层之外的绝大多数职责。

单条查询时，应该返回数据的`Optional`对象，由请求处理层进行进一步处理。

{% hint style="info" %}
对于组合多个数据持久层的业务，通常需要增加事务控制。
{% endhint %}

## 数据持久层（Repository）

与底层 MySQL、Oracle、Redis 等进行数据交互。

## 消息处理层（Handler）

处理其他模块的消息，调用业务层进行处理，（如果需要）返回处理结果。&#x20;

## 远程调用层（Client）

使用 Feign 或者其他技术定义的远程接口。
