[SpringBoot] [使用]经典三层架构及“DO/BO/VO/DTO“对象总结

前言

突然想写点关于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对象的约定

即复杂对象的交互必须封装成RequestResponse与前端进行交互。


项目组成

上门扯了那么多没用的概念. 那么我们一个简单的规范化开发项目应该如何设计, 并有哪几个组成部分呢? 废话不多说, 我们本章就来介绍一下这部分的内容.

项目主要的组成如下所示:

<此处使用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返回码大全

  • 17
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值