java架构之项目结构(entity / DTO / VO)
定义类的讲究
- ejb
Enterprise JavaBean(EJB)
,企业javaBean
。是java的核心代码,分别是会话Bean(Session Bean
)、实体Bean(Entity Bean
)、和消息驱动Bean(MessageDriven Bean
)。
- javaBean
可重用组件,类必须是具体的公开的,具有无参构造器。
- pojo
Plain Ordinary Java Object
,简单的Java对象,普通的javaBean。除了getter、setter,不能有其他业务方法。有时可以作为VO
(value-object)或DTO
(Data Transfer Object)来使用。
- entity
持久化,与数据库对应;
实体bean,一般是用于ORM
对象关系映射,一个实体映射成一张表,一般无业务逻辑代码。
负责将数据库中的表记录映射为内存中的Entity
对象,事实上,创建一个EntityBean对象相当于创建一条记录,删除一个EntityBean对象会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。
- DTO
系统、服务之间交互传输用;
数据传输对象(Data Transfer Object
)
dto
是做表示层(展示给用户)的,而实体是数据对象(表)。表示层dto的是由多个实体构成,或一个实体的一个部分,或多个实体的各个部分的结合体?如果你认为dto没有必要,难道你做数据库的时候,表与页面的展示是一摸一样的吗?不太现实吧。
dto是面向对象的,实体是面向关系数据库。
- VO(和DTO类似)
前台(APP\WAP\PC)展示用;
作用说明:
1、DTO可以增加或者减少entity的字段,来灵活实现信息传递;
2、VO可以仅向前端传输,页面需展示字段,如pageList等。
关系示例
多模块或单模块的项目而言,清晰的项目结构很重要。
如下,一个项目可以分为许多模块,如common模块和其他模块。
project
|-- common
|-- module1
|-- ...
其中
|-- common
|--dao
|--impl
|--
*DAO.java
|--dto
|--
*DTO.java
|--domain
|--entity
|--
*Entity.java
可以在resources
中单独写mapper.xml
|-- module1
|--model
|--
*VO.java
|--controller
|--service
|--interceptor
|--...
说明:
- [controller]
controller
是从用户接受和发送数据的地方。因此controller
中返回结果中的数据类型为*VO
类型。 - [dao] 那么,
mybatis
中mapper
中写的sql
语句,如select
等的返回结果是什么呢?
可以是entity
,可以是DTO
。从一张表中查询部分或多表联合查询,就可以返回DTO
。
整个*mapper.xml
是*DAO
对应,其中每个sql语句的返回类型可以是int
,List
,entity
,DTO
等。
@RequestMapping(path = "/list", method = RequestMethod.POST)
public Res<**VO> yourmethoed(){
//<*DTO> = service()...
//DTO转VO,return VO
}