一般来说,可以把系统粗略的分为三个层次,视图层,简称为View,它负责数据的输出和输入;业务层,简称为Model,它代表程序的实际业务;控制层,简称为Controller,处理界面的相应并调用业务层进行处理,有时把View和Controller两层合称为UI层。
在程序发展的历史上,MVC模式进过了多次演化,MVC1和MVC2是两种比较典型的模式,它们的区别主要在于View和Model的联系方式上。
(1) MVC1模式
这种模式主要用于桌面程序,使用观察者模式实现,具体来说就是让View充当观察者来观察Model的变化,而用户交互控制的地方用匿名类的方式统一放在controller中.
View接受用户输入,并将交互数据传递到Controller.
Controller统一进行处理命令,交由Model处理具体的业务.
进过处理Model更新后,通知View进行更新.
这种模式在旧的桌面应用程序使用较多,但是它的Model必须继承Observable类,View必须实现Observer接口,人为加大了继承体系的复杂度;而且Model通知View的方式使View必须了解Model的结构,无谓的加大了两个类的耦合程度。这些缺点使这种模式逐渐淡出了程序舞台。
代码如下:
Control类:
视图类(View):
模块类:
更新状态辅助类:
MVC1示例代码下载:
http://www.blogjava.net/Files/sitinspring/MVC1.rar
(2)MVC2模式
这种模式首见于网络程序,起初因为Model无法通知到Web程序的界面而发明,这种模式采用Controller做中介者,一方面取得View的输入,然后交由Model层处理,之后再把返回的数据传递到View。
View接受用户输入,并传递到Controller.
Controller统一进行处理命令,交由Model处理具体的业务.
进过处理Model更新后,Controller会选一个View并把Model内容传递(request,session)给它(forward).
然后View进行显示.
这种模式相对MVC优势很明显,首先Model和View无需继承甚么东西,其次Model和View无需了解对方的存在,只需准备相应的接口而已;缺点是Controller层变得相对复杂了。
代码如下:
控制类:
视图类:
模块类:
MVC2示例代码下载:
http://www.blogjava.net/Files/sitinspring/MVC2.rar