[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对象的约定
即复杂对象的交互必须封装成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 {@Autowiredprivate IUserDao userDao;public UserBO getByName(String name) {UserDO userDO = userDao.getByName("");// transfer userDO --> userBOreturn new UserBO();}
}
- UserController
/**
* Base Controller.
* Author: sean
* Date:May 24, 202112:42:24 AM
*/@RestController(value="/user")
public class UserController {@Autowiredprivate IUserService userService;@RequestMapping(path = "getByName", method = RequestMethod.GET)public CommonResponse<UserVO> getByName(String name){UserBO userBO = userService.getByName("");// transfet userBO --> userVO --> CommonResponseUserVO 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返回码大全
[SpringBoot] [使用]经典三层架构及“DO/BO/VO/DTO“对象总结相关推荐
- 物流快递系统前、后端+Java语言+SpringBoot项目+MVC三层架构+maven+Mysql+Tomcat+可以用于学习SpringBoot项目入门
物流快递系统前.后端+Java语言+SpringBoot项目+MVC三层架构+Mysql+Tomcat+可以用于学习SpringBoot项目入门 可以用于课程设计.毕业设计的知识点入门学习 提示:此资 ...
- 系统架构:经典三层架构
引言 经典三层架构是分层架构中最原始最典型的分层模式,其他分层架构都是其变种或扩展,例如阿里的四层架构模式和DDD领域驱动模型.阿里的 四层架构模型在三层基础上增加了 Manager 层,从而形成变种 ...
- PO,BO,VO,DTO和POJO的概念区分
PO,BO,VO,DTO和POJO的概念区分 文章目录 PO,BO,VO,DTO和POJO的概念区分 POJO(plain ordinary java object) VO(View Object) ...
- Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分
Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分 PO:持久对象 (persistent object),po(persiste ...
- Javaweb经典三层架构的演变
1.Javaweb经历了三个时期 ①JSP Model1第一代 JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有 ...
- PO,BO,VO,DTO和POJO
概念 POJO(plain ordinary java object) 无规则简单java对象 VO(View Object) 视图对象,用于表现层,它的作用是把某个指定页面(或组件)的所有数据封装起 ...
- PO/BO/VO/DTO/POJO/DAO/DO
文章目录 DO(Domain Object) DO(Data Object) PO VO BO DTO POJO DAO JavaBean EJB Entity 应用程序的分层设计 MVC 业务分层 ...
- java中bean对象_JAVA中PO,BO,VO,DTO,POJO,Entity,JavaBean,JavaBeans各个对象的区别,以及lombo、jpa简介及用法...
常见JAVA类概念介绍 PO:持久对象 (persistent object). 是ORM(Objevt Relational Mapping)框架中Entity,PO属性和数据库中表的字段形成一一对 ...
- PO,BO,VO,DTO区别
PO(bean.entity等命名): 持久对象,对应数据库表中的每一行记录,对应数据库的entity BO(service.manager.business等命名) 业务对象,将业务逻辑封装成一个对 ...
最新文章
- 程序员该如何抉择公司?
- MySQL 慢查询优化
- 工业项目,用MCU还是PLC?
- 收集一些常用的前端知识
- 再议指针和引用的一些事情吧
- matlab系统的初始条件,指定总线信号的初始条件
- Linux 统计某个字符串出现的次数
- Magento getModel getSingleton等常用函数说明
- 收藏 | 一文看尽2020AI论文
- pop!_os_Pop!幕后花絮_OS Linux
- Kubernates和Docker
- Android 关于在Activity中监听ListView
- 机器学习-Adaboost 算法(集成学习)
- HDU2602Bone Collector(DP,0/1背包)
- 关于librdkafka编译错误问题解决
- 零数开放许可链入选《互联网周刊》2021区块链应用创新TOP50
- ap mt7260a 华硕_带你入坑,用MT7620A带USB口的路由器搭建一个私有网盘
- 网站分析基础概念之初访者
- 开源驱动全球经济发展
- wuauclt.exe windows 自动更新测试命令