前言
突然想写点关于SpringBoot
相关使用方便的文章。
之前进行了2个月的项目重构, 于是先给大家介绍一下几种经典的项目组成。
三层架构
经典的三层架构主要是Dao/Service/Controller
层这三层. 相应的, 对应这3层的对象为DO/BO/VO
对象.
- PO: Persistant Object. 持久层对象. 类似数据库内的一条记录.
- DO: Domain Object. 领域对象. 我们在三层架构中使用的DO其实是PO.
- BO: Business Object. 业务对象.
- VO: Value Object. 表现对象. 主要用于与前端直接的交互与信息传递.
- DTO: Data Transfer Object. 通常是在
OpenApi
. 即此项目与其他外界项目交互时使用的对象.
PS: 最后插一句. 其实, 如果你的项目功能足够简单. 项目比较小的话, 其实没有必要分的那么细致. 掌握设计的“度”, 非常重要.
阿里开发手册的部分
- Domain对象的约定
- Request和Response对象的约定
即复杂对象的交互必须封装成Request
和 Response
与前端进行交互。
项目组成
上门扯了那么多没用的概念. 那么我们一个简单的规范化开发项目应该如何设计, 并有哪几个组成部分呢? 废话不多说, 我们本章就来介绍一下这部分的内容.
项目主要的组成如下所示:
<此处使用Tree命令生成一下>
* common 公共工具类
* domain
* do
* bo
* vo
* dto
* rsp response
* req request
* dao
* service
* controller
* Application.class
相关项目&实战
- Application
@SpringBootApplication
public class Application {
public static void main(String []args){
new SpringApplication().run(args);
}
}
- UserDaoImpl
/**
* UserDao 层.
* Author: sean
* Date:May 24, 202112:41:46 AM
*/
@Configuration
public class UserDaoImpl implements IUserDao{
public UserDO getByName(String name) {
return new UserDO();
}
}
- UserServiceImpl
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userDao;
public UserBO getByName(String name) {
UserDO userDO = userDao.getByName("");
// transfer userDO --> userBO
return new UserBO();
}
}
- UserController
/**
* Base Controller.
* Author: sean
* Date:May 24, 202112:42:24 AM
*/
@RestController(value="/user")
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping(path = "getByName", method = RequestMethod.GET)
public CommonResponse<UserVO> getByName(String name){
UserBO userBO = userService.getByName("");
// transfet userBO --> userVO --> CommonResponse
UserVO userVO = new UserVO();
return new CommonResponse(userVO).success();
}
}
- CommonResponse
/**
* 通用返回值封装.
*
* Author: sean
* Date:May 24, 202112:35:18 AM
* @param <T>
*/
@Data
public class CommonResponse<T> {
String description;
String code;
T data;
public CommonResponse(T data){
this.data = data;
}
public CommonResponse<T> success(){
this.code = "200";
this.description = "success";
return this;
}
public CommonResponse<T> error(){
this.code = "400";
this.description = "error";
return this;
}
}
完整项目. 欢迎访问github: https://github.com/SeanYanxml/springboot-sophle/tree/main/springboot-standard
Reference
[1]. Java 中 DO、PO、BO、DTO、VO 等各对象概念说明
[2]. Java中常见的对象类型简述(DO、BO、DTO、VO、AO、PO)
[3]. Spring Boot 学习02-----Dependency以及配置等
[4]. springBoot学习笔记之application.yml配置文件
[5]. HTTP返回码大全