项目分层设计 | 青训营笔记

161 阅读2分钟

这是我参与「第三届青训营 - 后端场」笔记创作活动的的第 2 篇笔记。


对于后端项目,为了使得代码的可维护性以及解耦,通常要将项目分为几个层来分工协作。一个优秀的项目结构,对于多人协作、代码更改等更加方便。

简介

项目分层一般分层分为:

  • controller:控制层

  • service:服务层

  • model:模型层

  • DAO (Data Access Object):数据层

分层解析

controller

这一层实际上为 MVC (Model, View, Controller) 框架遗留层,在原先用于控制视图层的数据。

在当前前后端分离的项目中,Controller 层大多用来处理 HTTP 请求,将 HTTP 的 JSON 或 QueryString 请求转化为程序中的 struct

service

这一层提供一些业务服务,将服务封装于此,controller 层可调用 service 层的方法。

这里推荐 controller 只调用 service 的方法,而不是去直接操作数据库,因为这样才能使得层级分明,使得 controller 不会过于杂乱。

service 层可调用 DAO 的方法获取数据,并且可以多次调用 DAO 的方法来实现一些业务。

DAO

这一层直接底层操作 MySQL、MongoDB 等数据库以及 Redis,提供数据的增删改查 (CURD)

这一层不包含任何业务,只提供数据的增删改查

Model

这一层是 SQL 的 Table,对应的是 Object 或者 Struct。

这一层不包含逻辑,只应该是类型

举例说明

假设实现一个早餐店的功能

在 controller 层,会处理 (HTTP) 发来的订单 (JSON),调用相应的服务 (例如拿某种价格的面包),处理给出的食物 (JSON)

在 service 层,包含蒸包子、炒面 (处理数据) 等服务,写各种早餐店的服务

在 DAO 层,包含增加一个菜的品种、减少一个原材料的个数、查找鸡蛋在哪、修改菜的品种 (CURD),不包含业务,只进行 CURD

在 Model 层,存着当前的订单 struct、菜种类 struct 等等 struct 或 object