深入理解 Domain Objects

2023-01-16  本文已影响0人  bin_guo

DAO (Data Access Object)数据访问对象

其它资料:在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。
DAO是微软的第一个面向对象的数据库接口。DAO对象封闭了Access的Jet函数。通过Jet函数,它还可以访问其他的结构化查询语言(SQL)数据库。

DTO(Data Transfer Object)数据传输对象

DO (Domain Object)领域对象

VO(View Object)视图模型

AO(Application Object)应用对象

BO( Business Object)业务对象

其它资料:是简单的真实世界的软件抽象。业务对象通常位于中间层或者业务逻辑层。BO支持序列化和反序列化,可以轻易地将BO的Java实例转换为一个XML文件或者一个流保存起来,并且在需要的时候,将这个BO从XML或者流中转换回一个Java实例。

POJO( Plain Ordinary Java Object)纯普通Java对象

PO(Persistent Object)持久化对象

Entity(应用程序域中的一个概念)实体

Model (概念实体模型)实体类和模型

View (概念视图模型)视图模型

————————————————
原文链接:https://blog.csdn.net/SR02020/article/details/105821816


Example

User table
user_id user_name pass_word create_time dept_id
Persistent Object(PO)

此时实现这个 class 的 object 对应着数据库中的每一条record,那么这个object就是一个PO。(class是用来映射数据库表的类,object是用来影射数据库表里每一行数据的对象)

class User {
  private Long userId;
  private String userName;
  private String passWord;
  private LocalDateTime createTime;
  private Long deptId;
  // getter/setter
}
Data Access Object(DAO)

一般多用来作为Mapper,UserMapper 表示用于封装数据库操作的一个映射对象
数据访问对象,顾名思义是封装所有对于数据访问CRUD操作的类(内容为数据库查询方法),用来访问数据库,然后业务逻辑可以直接注入DAO对象来使用。

interface/class UserDAO {
  public List<UserVO> getUserByCondition(UserDTO userDto, Page page);
  public User getUserById(Long userId);
  public int deleteUserByBatchIds(List<Long> userIds);
  public int editUser(UserDTO userDto);
  public int addUser(UserDTO userDto);
}

如果出现了公共访问操作方法,不需要给多个DAO重复定义,只需要创建一个 BaseMapper 即可,这也是 MybatisPlus 的思路。public interface UserMapper extends BaseMapper<User>

Business Object(BO)

封装了业务逻辑的对象,一般在开发中,封装成对象或者复杂对象,可包含多个类。我们可以理解为一个BO可以包含一个或者多个POs来进行自由组合

Data Transfer Object(DTO)& View Object(VO)

这个需要和VO区分开,比如我们在不同需求下的VOs是不一样的,那么会有以下

View-Object-1
{
  "userName": "Alan Rickman",
  "passWord": "R.I.P"
}
View-Object-2
{
  "userName": "Alan Rickman",
  "createTime": "1997-06-26"
}
Data-Transfer-Object
{
  "userId": "alan.rickman",
  "userName": "Alan Rickman",
  "passWord": "R.I.P",
  "createTime": "1997-06-26",
  "deptId": "126"
}

此时虽然VO是用的object不一样,但里面字段都是从DTO中来的,那么我们可以认为此时DTO就是一个包含原始数据的object


Flow: Http request -> Controller/Provider -> Service -> Database

《阿里巴巴Java开发规范》

  • DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象
  • DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象
  • BO(BusinessObject):业务对象,由 Service 层输出的封装业务逻辑的对象
  • AO(ApplicationObject):应用对象,在Web层与Service层之间抽象的复用对象模型, 极为贴近展示层,复用度不高。
  • VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
  • Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。
上一篇 下一篇

猜你喜欢

热点阅读