业务分层
标签(空格分隔): 面试
分层
简单的mvc结构如下:
view层:视图层。
Control层:业务层,集合了各种action。调用model层的方法,实现对数据的访问。
model层:模型层,一般和数据打交道。例如:一个表对应一个model类。
基于control层和model层并没有很好的实现模块化,进行如下改进:
view层:显示层。
control层:业务调度,不直接联系dao层,需要操作数据的时候,通过service层访问DAO层来实现。
service层:业务逻辑处理,调用DAO操作数据,针对服务进行设计。 service层将controller的逻辑分类,保证了controller的逻辑更加清晰。
dao层:数据访问借口。细化了数据模型,更加原子化。
具体
DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。
Service层:Service层主要负责业务模块的逻辑应用设计。同样是首先设计接口,再设计其实现的类,接着再Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。Service层的业务实现,具体要调用到已定义的DAO层的接口,封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。
Controller层:Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。
View层 :此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示,
这样做的好处是:
- control层得以精简,因其中的一些逻辑,被重构成一个个的服务。
- 只负责和数据打交道的DAO层,相比之前的model层,也得以精简(DAO层尽量只做最原子的数据操作,不同数据操作之间的联系,这边不考虑,那是service层的事情)。
- service层可以实现很大程度上的代码复用,程序的功能封装更清晰了。
- 由于service层更加清晰的定义了应用程序的边界,那么对于各个service函数(对应某个服务/应用),要做到自动化测试就方便多了
问:在controller和service里都写那些代码?
答:Controller,从字面上理解是控制器,所以它是负责业务调度的,所以在这一层应写一些业务的调度代码,而具体的业务处理应放在service中去写,而且service不单纯是对于dao的增删改查的调用,service是业务层,所以应该更切近于具体业务功能要求,所以在这一层,一个方法所体现的是一个可以对外提供的功能,比如购物商城中的生成订单方法,这里面就不简单是增加个订单记录那么简单,我们需要查询库存,核对商品等一系列实际业务逻辑的处理;
问:controller 和service 职责如何划分?
答:一般来说有两种,一种是薄Controller,一种是厚Controller。前者Controller只负责搜集参数、调用服务、转发或重定向结果集,其他业务逻辑都放在Service层。后者则相反,业务逻辑都在Controller中进行处理,服务层只负责一些增删改查的方法。两者各有好处,具体情况需要看业务逻辑,如果业务复杂,甚至可以增加多个业务层