根据分层进行设计
这种模式是我们常见的根据MVC的基础概念进行分层的。
- Model(模型)表示应用程序核心(比如数据库记录字段)。
- View(视图)显示数据(数据库记录)。
- Controller(控制器)处理输入(写入数据库记录)。
模型
domain目录下面,放的就是项目的模型层。在实际操作中,它还可能有下面几种名字,在普通项目中区别不大,你最好在项目中保持相同的意义来避免歧义。
entity
这个意义比较明显,就是实体的意思,最常用
model
模型的意思,一般用来在不同系统之间交互。但如果你的模型非常简单,直接用entity来表示也是可以的
domain
这个范围有点大,在许多国外项目中经常使用。这个是表达意义上的差异,和model其实是差不多的。在DDD的场景中意义要更大一些。
由于model和domain的范围是比较大的,我通常在项目中使用entity来表示和数据库的交互。在JPA之类的ORM中,也是做相关处理的。比如
javax.persistence.Entity
注解。Dao
dao
层叫数据访问层,全称为data access object
,属于一种比较底层,比较基础的操作。在一些其他框架中,还会叫别的名字。mapper
这个一般是Mybaits之类的框架所生成的目录,通常是一些接口。
repository
仓库的意思,在jpa中经常用。
Dao应该满足最小封装原则,理论上只涉及一句SQL的执行。如果有多个数据的存取动作,需要封装在Service中,并用事务进行管理。
service和controller
这个没什么好说的,基本上所有重要的逻辑都在这里完成。service用于逻辑处理,controller用于接口暴露。
- 代码层(java),根目录com.xxx: XxxApplication.java + 对应模块代码(domain + controller + service + mapper等)
- XxxApplication.java(项目主入口,main方法)
- controller: 控制层,请求接口
- service: 服务层,逻辑代码, 数据服务的实现接口(serviceImpl)UserService.java 和 UserServiceImpl.java
- mapper: 数据层,或者dao, 比如UserMapper.java 、UserMapper.xml
- domain: 实体类,同 bean、entity、model
bean: 任何一个java类都可以成为一个bean,这个类里包含对象的属性、get、set方法及其他的业务逻辑。
model: model是MVC中的概念,可以理解为View层展示数据的对象。
entity:数据表对应到实体类的映射。
- 资源层(resource):存放资源文件,比如邮件html、mapper
- email邮件模板,比如registerSuccess.html
- properties配置文件,比如mybatis.properties
- mapper文件,比如UserMapper.xml(也可以写到代码层的mapper文件夹中)
- template模板
- application.yml
- log4j2.xml日志配置
- entity:实体类,也可以命名为bean、entity、model,例如User.java
- controller: 控制层,请求接口,例如UserController.java
- service: 服务层,以及关联的接口文件,例如UserService.java(impl/UserServiceImpl.java)
- mapper: 数据层,也可以命名为dao,例如UserMapper.java和UserMapper.xml
- model: 请求使用到的实体类: xxxRequestTO.java、xxxReponseTO.java
- config、constant、util等配置文件
- XxxApplication.java : 项目主入口,main方法
JavaWeb 黑马旅游网 项目结构:
- dao包
- domain包
- service包
- utils包
- web包
- impl包
1、dao包
Dao:数据库相关操作 数据访问。Dao 数据访问层:就是用来访问数据库实现数据的持久化(把内存中的数据永久保存到硬盘中 )。
2、domain包
domain:实体类(entity)
3、service包
在此层做相应的业务逻辑处理。
4、utils包
工具包
5、web包
一般 存放 servlet 和 filter 。
6、impl包
impl是implement的简写,换言之,放置的应该是接口的实现类。一般三层开发中,service层和dao层都会有接口及其实现类,为了项目能更好的管理和开发,一般将接口放一个包,实现类放置在这个包的子包中。