前言

突然想写点关于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 {@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“对象总结相关推荐

  1. 物流快递系统前、后端+Java语言+SpringBoot项目+MVC三层架构+maven+Mysql+Tomcat+可以用于学习SpringBoot项目入门

    物流快递系统前.后端+Java语言+SpringBoot项目+MVC三层架构+Mysql+Tomcat+可以用于学习SpringBoot项目入门 可以用于课程设计.毕业设计的知识点入门学习 提示:此资 ...

  2. 系统架构:经典三层架构

    引言 经典三层架构是分层架构中最原始最典型的分层模式,其他分层架构都是其变种或扩展,例如阿里的四层架构模式和DDD领域驱动模型.阿里的 四层架构模型在三层基础上增加了 Manager 层,从而形成变种 ...

  3. PO,BO,VO,DTO和POJO的概念区分

    PO,BO,VO,DTO和POJO的概念区分 文章目录 PO,BO,VO,DTO和POJO的概念区分 POJO(plain ordinary java object) VO(View Object) ...

  4. 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 ...

  5. Javaweb经典三层架构的演变

    1.Javaweb经历了三个时期 ①JSP Model1第一代  JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有 ...

  6. PO,BO,VO,DTO和POJO

    概念 POJO(plain ordinary java object) 无规则简单java对象 VO(View Object) 视图对象,用于表现层,它的作用是把某个指定页面(或组件)的所有数据封装起 ...

  7. PO/BO/VO/DTO/POJO/DAO/DO

    文章目录 DO(Domain Object) DO(Data Object) PO VO BO DTO POJO DAO JavaBean EJB Entity 应用程序的分层设计 MVC 业务分层 ...

  8. java中bean对象_JAVA中PO,BO,VO,DTO,POJO,Entity,JavaBean,JavaBeans各个对象的区别,以及lombo、jpa简介及用法...

    常见JAVA类概念介绍 PO:持久对象 (persistent object). 是ORM(Objevt Relational Mapping)框架中Entity,PO属性和数据库中表的字段形成一一对 ...

  9. PO,BO,VO,DTO区别

    PO(bean.entity等命名): 持久对象,对应数据库表中的每一行记录,对应数据库的entity BO(service.manager.business等命名) 业务对象,将业务逻辑封装成一个对 ...

最新文章

  1. 程序员该如何抉择公司?
  2. MySQL 慢查询优化
  3. 工业项目,用MCU还是PLC?
  4. 收集一些常用的前端知识
  5. 再议指针和引用的一些事情吧
  6. matlab系统的初始条件,指定总线信号的初始条件
  7. Linux 统计某个字符串出现的次数
  8. Magento getModel getSingleton等常用函数说明
  9. 收藏 | 一文看尽2020AI论文
  10. pop!_os_Pop!幕后花絮_OS Linux
  11. Kubernates和Docker
  12. Android 关于在Activity中监听ListView
  13. 机器学习-Adaboost 算法(集成学习)
  14. HDU2602Bone Collector(DP,0/1背包)
  15. 关于librdkafka编译错误问题解决
  16. 零数开放许可链入选《互联网周刊》2021区块链应用创新TOP50
  17. ap mt7260a 华硕_带你入坑,用MT7620A带USB口的路由器搭建一个私有网盘
  18. 网站分析基础概念之初访者
  19. 开源驱动全球经济发展
  20. wuauclt.exe windows 自动更新测试命令

热门文章

  1. 神兔侠儿童安全预警平台正式发布,互联网将为保护儿童安全提供新思路
  2. 基于RFID技术在服装智慧门店中的应用-rfid服装盘点
  3. Codevs3162抄书问题题解
  4. ELK入门与基本概念
  5. STC51单片机26——串口发送DS18B20温度值
  6. WinPE能破解Windows的密码,这样Windows就不安全吗?
  7. Kafka-eagle 安装教程
  8. 重装android studio 始终提示SDK installed
  9. 爱立信财大气粗 华为错失马可尼
  10. Windows取证——注册表操作命令