BO:Business Object,业务对象。主要是承载业务数据的实体。处理业务逻辑的时候使用,数据结构也是针对业务逻辑建立的。
PO:persistence Object,持久化对象。数据最终要存储,无论以何种形式存储,都必须要持久化。加入使用关系数据库存储,一个PO对应一条数据库的记录,或者是对象从数据库查询出来的结果集的一条记录。
DAO:Data Access Object,数据访问对象。包含一些数据库的基本操作,CRUD,和数据库打交道。负责将PO持久化到数据库,也负责将从数据库查询的结果集映射为PO。
DTO:Data Transfer Object,数据传输对象。一般用来在前段和后台的数据传输,数据结构的简历是基于网络传输的,减少传输的数据量,避免传输过多无用的数据。
VO:Value Object,值对象。主要用在前段数据和控件的绑定操作中,以键值对的形式存在。可以从DTO转化而来,这么做的好处就是减少对于DTO的依赖,进一步 减少对应后端的依赖。还可以增加前段的可测试性,也就是没有DTO,也可以对前段逻辑进行自动化的单元测试,可以通过MockDTO来达到测试的目的。
我想通过上面的这幅图来表达我的想法。web,winform,silverlight,console代表不同的前端类型。Domain代表领域对象,也可以是BLL。
获取数据的过程:首先DAO从数据库获取结果集,转换为 PO。Domain接受到DAO传递过来的PO之后,负责将PO转换为BO,再进行业务逻辑的处理。处理完毕,传递BO给service,service 负责转换为DTO,传输给前端接收到DTO之后,首先转换为VO,然后再进行前端的业务处理。
提交数据的过程: 前端将数据整理为DTO,传输给service,service转换为BO传输给Domain,Domain转换为PO,调用DAO提供的数据持久化方法,持久化PO,DAO负责将PO持久化为数据库的数据。