我对MVC的理解

[size=medium] 从大一开始学习JAVAWEB开发到现在,我对mvc的理解一直是处于短路状态,在没有一点点的mvc概念之前,我都是在jsp上面堆满了各种逻辑判断,各种<% ....%>然后里面就是无穷尽的if{...}else{...}
嘿嘿,那时候还以为,哇,超牛b,一个文件搞定所有,知道后来学习了serverlet,突然又觉得,serverlet还不错嘛,然后又在serverlet里面堆了很多逻辑判断,同时在jsp里面也堆很多<%%>,那时候,已经觉得,jsp+serverlet+javaBean已经是一种很完美的模式了,那个时候,老师时不时强调什么是MVC。他说,M就是Model,对应着javaBean;V就是View,对应着jsp;C就是Control,对应着serverlet。
我听着,觉得挺有道理,就记下了,以后每次做一些小项目,都是按照流程做,先
M然后C,再V。嘿,那时候觉得,还挺顺溜的。后来又学习了JDBC,觉得更神奇了,居然还可以从数据库中娶数据。当时通过jdbc,从数据库中取出自己的名字,然后打印在jsp页面的时候,我了个擦,无比激动。
之后自己又学习了struts2,学完了struts2再去看下struts1,我靠,怎么相差这么多,不是1和2吗,当时就是图个新,去学了struts2的。那时候理所当然的想,嗯,对,struts2就是control层了,妥妥的,没争议。
学struts2是大二的事了,那时候老师还在教serverlet,我自学了struts2和hibernate。
突然觉得,hibernate这么厉害,以前jdbc要很多行的代码,现在一两行就行,当时就觉得,hibernate超神奇。然后又想,hibernate属于哪一层呢,javaBean属于model层,struts2属于control层,jsp属于view层,当时就蒙了。。。当时冥思苦想,还是没想明白,就暂时归为了model层,因为hibernate它直接操作javabean和数据库,接的最近,嗯,当时就是这么想的。后来因为做项目的需要,又学习了spring,当时是spring2.5。当时在用spring的ioc和aop的时候,又觉得spring很牛逼,它还能知道你在什么时候想做什么,然后还帮你去实现你要的东西,觉得spring控制着全局,然后就很坚决的认为,spring属于control层。。。
一直到现在我还在不断的摸索中(虽然只过了半年,但是好像过了很久),期间我纠正了我很多的理所当然的想法。
我觉得,具体什么是MVC,不重要,重要的是,你想要什么,以及你想要用你以前的模式或经验之类的东西,为你做了什么。不过,我还是忍不住,来说说据我了解的mvc,当然是很肤浅的一种理解,哈哈。
在我看来,mvc是一种思想,是一种解决事情的流程或手法,或者可以说是一种解决事情最佳实践。它不是针对具体什么层或处于什么层。就是在不断的实践中,那些大牛觉以这样的想法来做事最爽,所以就渐渐的总结出了一套最佳实践的方案。而struts2就是用了这种MVC思想,它是MVC的一种具体实现。
就拿一个具体的项目来说(话说我没有做过怎么真正的项目),比如你用的是jsp+struts2+hibernate+spring的解决方案。这时候从小的方面来说,可以把项目划分为web层、业务层(service)、持久层(DAO)。先说下我理解的业务层和持久层。DAO(data access object)简单来说就是数据访问对象,这是最底的一层,与数据库操作相关,与具体
的业务逻辑无关,纯粹是对元数据的一种操作,它不用管你这个数据对象是做什么的,该取出来的时候取出来,该丢弃的就丢弃,该查询的时候就查询,该更改的时候就更改。而且在这一层,不应该有任何的业务上的逻辑判断,纯粹的增、删、改、查,这4个动作已足够。有些人把分页也嵌在dao层,这种做法不提倡,分页最好还是放在业务层或更高的层来做,可以做个缓存插件来维护数据库和业务层或更高层的数据实时性。
业务层是核心层,和具体的业务相关。基本上你要的功能,全部在这一层实现。该计算的计算,该判断的判断等等,这一层和一些具体的行业业务背景操作相关联,每一行的实现都不一样,是一个项目中最最核心的一部分,也是最最复杂的一部分,做这一层的,往往是最核心的程序员来做,他还要有相关的行业知识才能胜任。由于太复杂,鉴于理解不够深入,所以就到此为止。然后就是web层了,用struts2来处理web层,因为struts2的MVC模式对于处理web层,可以说到目前为止是一种最佳实践。
strut2里面的M层就是一系列的Action,无论是基于setter还是ModelDriven实现的,因为在Action中是存放数据的,它起到一个数据存取和传递的作用。V就是jsp或者一些用于页面显示的模板,用来和用户进行交互的页面。C就是struts2的一些xml配置文件了,比如struts.xml,这些配置文件就是控制页面的跳转的,起到控制的作用。而hibernate和spring不属于这些层的任何一层,可以理解为hibernate和spring仅仅是个工具。hibernate用于在dao层更好地实现数据的持久化,spring用于解耦web层、业务层(service)以及持久层而已。


[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值