小黑子的理解
- 一、基于Maven模板构建的三种常见Java项目——基于maven
- 二、通常的java目录结构
- utils层 工具包
- model层(pojo层)
- exceptions层 报错包
- dao层(mapper层)[impl包—查询数据库]
- service层 定义接口 [impl—实现事务]
- controller层 [处理前台发送的请求]
- Web层
- 三、软件分层架构简单理解
- 分层架构
- 经典三层架构
- MVC
- 三层架构和MVC的区别与联系
一、基于Maven模板构建的三种常见Java项目——基于maven
新建Maven project项目时,需要选择archetype。archetype的意思就是模板原型的意思,原型是一个Maven项目模板工具包。原型将帮助作者为用户创建Maven项目模板,规范了项目的结构。根据所创建项目的不同,常见的三种模板有:
- maven-archetype-quickstart
- maven-archetype-webapp
- cocoon-22-archetype-webapp
二、通常的java目录结构
src/main/java
项目的源代码所在的目录
src/main/resources
项目的资源文件所在的目录
src/main/filters
项目的资源过滤文件所在的目录
src/main/webapp
如果是web项目,则该目录是web应用源代码所在的目录,比如html文件和web.xml等都在该目录下。src/test/java
测试代码所在的目录
src/test/resources
测试相关的资源文件所在的目录
src/test/filters
测试相关的资源过滤文件所在的目录
目录实例图:
从一个用户访问一个网站的情况来看,对应着项目代码结构来分析,可以贯穿整个代码分层:
utils层 工具包
utils包作为一个工具类包,工具类:可以动态地生成DAO的实现类(或者说可以动态生成DAO的代理类)
model层(pojo层)
-
model层即数据库实体层,也被称为entity层,pojo层。
-
是用于存放实体的类的
-
类中定义了多个类属性,并与数据库表的字段保持一致,一般数据库一张表对应一个实体类,类属性同表字段一一对应。
-
主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。
exceptions层 报错包
作为一个报错包,可自定义创建报错类,见名知意
dao层(mapper层)[impl包—查询数据库]
-
dao层即数据持久层,也被称为mapper层,叫数据持久层,先设计接口,然后在配置文件中进行配置其实现的关联。
-
dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。
-
数据持久化操作就是指,把数据放到持久化的介质中,同时提供增删改查操作,比如数据通过hibernate插入到数据库中
-
一般都是在dao层下写给接口,然后在impl包下实现类连接接口,然后重写方法
service层 定义接口 [impl—实现事务]
- service层即业务逻辑层。
- service层的作用为完成功能设计。
- service层调用dao层接口,接收dao层返回的数据,完成项目的基本功能设计。
- 业务逻辑层,完成功能的设计 和dao层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。
- 接下来就可以在service层调用dao层的接口进行业务逻辑应用的处理。
- service的impl是把mapper和service进行整合的文件 封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性。
controller层 [处理前台发送的请求]
-
controller层即控制层,控制业务逻辑service
-
controller层的功能为请求和响应控制,负责前后端交互。
-
controller层接受前端请求,调用service层,接收service层返回的数据,最后返回具体的页面和数据到客户端
-
controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行
Web层
主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等
三、软件分层架构简单理解
什么是架构分层?
分层架构是将软件模块按照水平切分的方式分成多个层,一个系统由多层组成,每层由多个模块组成。同时,每层有自己独立的职责,多个层次协同提供完整的功能。比如,我们经常提到的MVC架构,就是一种非常典型非常基础的分层方式
系统架构分层之后,往往需要达到以下目标:
- 高内聚:分层设计可以简化系统设计,让不同层专注做某一模块的事;
- 低耦合:层与层之间通过接口或API来交互,依赖方不用知道被依赖方的细节;
- 复用:分层之后可以做到代码或功能的复用;
- 扩展性:分层架构可以让代码更容易横向扩展
分层架构
一般分层架构由以下组成:
- 表示层:
- 也说是客户端层,不论是App还是Web或者其他,指客户直接接触到的页面
- 接口层:
- 一般是两种服务形式,即“
RPC
(采用Service提供RPC接口服务)”和“HTTP
(通过Web封装成Http接口服务)”。这层一般不抛出异常,否则会导致client会出现不可控的错误,以通过标准的ErrorCode&ErrorMeg提示为主,一般还会有流量控制和权限等控制监控在这层
- 一般是两种服务形式,即“
- 业务层:
- 所有的业务实现放在这层,一般可以按照业务类型分类也便于识别管理;事务也放在这层,一般推荐只放在这层统一管理
- 持久层:
- 主要有数据库的entity映射类,只提供简单CRUD的dao操作类,接口mapper类,一些连接中间件的封装util工具类;这层推荐严格禁止事务,异常可以统一封装一个
- 数据层:
- 数据层指存储,根据业务选择的数据存储基础设施,传统的关系型数据库Mysql、Oracle,Nosql数据库Redis、ES、Mongodb等。不同的数据库采用的connect方式不同,需要在持久层独立封装一个独立Util类进行集中管理
经典三层架构
三层架构 ,通常就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)
-
表现层(PL):
- 通俗讲就是展现给用户的界面,对应项目中的Web层包含Servlet和Controller等
- 负责处理用户交互和展示数据的部分。它包括用户界面(UI)、前端逻辑以及与用户交互的各种元素。在Web应用中,通常表现层由HTML、CSS、JavaScript等组成
-
业务逻辑层(BLL):
- 也称作领域层,负责系统业务逻辑的处理,对应项目中Service和ServiceImpl等
- 它包括处理用户请求、验证数据、执行业务规则、数据转换等操作。在传统的三层架构中,业务逻辑层通常包含业务逻辑和数据访问逻辑
-
数据访问层(DAL):
- 该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等,对应项目中的Dao
- 它隐藏了底层数据存储细节,并提供高层次的接口供业务逻辑层使用
- 它包括处理用户请求、验证数据、执行业务规则、数据转换等操作。在传统的三层架构中,业务逻辑层通常包含业务逻辑和数据访问逻辑
在开源技术框架中,表现层实现的代表作品是Struts1/2、Spring MVC,业务层实现的代表作品是Spring,持久层实现的代表作品是Hibernate和Mybatis
MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,虽然MVC并不是严格意义上的三层架构,但可以与传统的三层架构进行对比
-
模型(Model):
- 表示应用程序的数据和业务逻辑,负责处理数据的读取、存储、转换和验证等操作。在传统的三层架构中,模型可以对应于业务逻辑层和数据访问层。
- 分为两类,一类称为数据承载Bean,一类称为业务处理Bean。数据承载Bean是指实体类,专门承载业务数据的,如Student、User等。而业务处理Bean则是指Service或Dao对象,专门用于处理用户提交请求的
-
视图(View):
- 表示应用程序的用户界面,负责展示数据和与用户进行交互。视图通常与表现层相对应。
-
控制器(Controller):
- 作为模型和视图之间的协调者,接收用户的输入请求,根据用户请求的类型和数据,进行相应的业务处理,并决定如何更新模型和视图。控制器通常对应于业务逻辑层
- 用于将用户请求转发给相应的Model进行处理,并处理Model的计算结果向用户提供响应
标准的MVC交互模型如下图:
Web MVC标准架构,如下图所示:
三层架构和MVC的区别与联系
MVC严格说是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话,而C层直接与三层中的BLL进行对话。
三层架构和MVC可以共存。三层架构是基于业务逻辑来分的,而MVC是基于页面来分的。MVC是表现模式(Presentation Pattern),三层架构是典型的架构模式(Architecture Pattern)。
三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC作为表现模式是不存在上下关系的,而是相互协作关系。即使将MVC当作架构模式,也不是分层模式。MVC和三层架构基本没有可比性,是应用于不同领域的技术。