MVC基础理解

文章讨论了MVC模式在实际应用中的演变,从最初的HTML+Servlet+Service+Dao结构出发,分析了在业务复杂时单纯MVC模式可能遇到的问题,如Action代码复杂、Model层混乱等。引入Service层能精简Controller,明确业务逻辑,提高代码复用和测试性,但也会增加理解难度和设计挑战。适合复杂业务的项目,简单项目则不必过度设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

M:Model 进行数据库操作

V:View 前端页面展示

C:Controller 处理业务逻辑

其实这种设计模式在用户的角度来看,应该叫做"VCM"模式。V与页面交互-C处理请求与业务逻辑-M操作数据库获得数据。

在最近的学习中,老师要求项目的结构是:HTML页面+继承HttpServlet(V)的Servlet类(C)+Service层+Dao层(M)。其实我一直在怀疑这种模式有过度设计之嫌:在学习MVC之前,我们用不到Controller层,于是业务逻辑就要交给Service层来处理。而现在,所有的业务逻辑在Controller层都已经处理完了,Service层存在的意义荡然无存!

终于在网络上找到了大神给出的解释:

原文链接:http://www.4u4v.net/mvc-simple-enough-on-the-introduction-of-service-dao-layer.html

简单的mvc结构如下:

view层:显示层。

control层:业务层,集合了各种action。

model层:模型层,一般和数据打交道。简单的sample:一个表对应一个model类。

其中control层调用model层的方法,实现对数据的访问。

采用这样的结构在一定程度上,可以做到代码清晰,较容易扩展,代码的管理复杂度较低。

但是如果是业务很多,逻辑又很复杂的网站,如果再加上开发人员的水平参差不齐,那必然会导致下面的情况:

1action中的代码越来越长,逻辑越来越复杂,不同action之间看起来有很多可以重用的代码, 但是真要进行重构的话,又非常困难。

2model层中包含的方法越来越多,有些方法也过于复杂。甚至在不少方法中还包含了业务逻辑。

3代码的修改,还是牵一发而动全身。

4代码难以进行自动化测试。

本来以为引入了mvc,程序的管理复杂度问题就高枕无忧了,但现在又面临了相同的问题了。

以我最近的所学看,在mvc中再引入service层,可以在很大程度上避免或者缓解上述问题。

原有的mvc结构改成如下:

1view层:显示层。

2control层:业务层,集合了各种action。

3service层。

4DAO层。

原来的model层不见了,增加了service层和DAO层。DAO,即Data Access Object,数据访问接口,数据访问:顾名思义就是与数据库打交道。

在这个结构中,control不直接和DAO联系,

需要操作数据的时候,通过service层访问DAO层来实现。

service层做的事情,不仅仅是调用DAO操作数据,还会包含了一定的业务逻辑。整个程序的设计,也变成了针对服务进行设计。

这样做的好处是:

1control层中的action得以精简,因为action中的一些逻辑,被重构成一个个的服务。而不同的action也可以重用服务了

2只负责和数据打交道的DAO层,相比之前的model层,也得以精简(DAO层尽量只做最原子的数据操作,不同数据操作之间的联系,这边不考虑,那是service层的事情)。

3service层可以实现很大程度上的代码复用,程序的功能封装更清晰了。

4由于service层更加清晰的定义了应用程序的边界,那么对于各个service函数(对应某个服务/应用),要做到自动化测试就方便多了。WEB程序如何做到能方便的进行单元测试,这是一直困扰我的难题,这样的设计似乎真的可行了~

5开发人员的工作分配,理论上真的可以按层次划分了。只是理论上~

同时,这样的设计模式也是存在一定的缺点的:

层次太多,刚接触的开发人员理解起来比简单的mvc结构费时;

service层的设计需要一定的功力,因为action中和model层的逻辑在很大程度上转移到这里了。

但整体上看,service Layer的引入,更加清晰的定义了应用程序的边界,提供了一系列可以重用的操作集合。这对于网站的可扩展性和可维护性是非常有帮助的。

当然,如果网站的业务逻辑并不复杂,完全没必要用这样的设计。过度设计是万恶之源~

呜呜!感谢大神的最后一句话让我深有成就感!

其中,对于代码重用的作用我有了些浅薄的理解,而其他问题就一点也没有共鸣了。也许在我可以在以后参与大项目开发的工作过程中弄懂这些吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值