14 一月, 2005
plog学习 - MVC设计架构
UTBlog属于pLog系统,而pLog系统的实现,遵循MVC架构模式。为了能够直接修改UTBlog,特地花了点时间研究了一下MVC。
所谓的MVC,Model - View - Controller, 翻译过来就是模型-视图-控制。 其实就是N-Tire中分离数据和表示(presentation)、独立业务逻辑(logic)和业务处理的一种方式。MVC更关心后者。其中Model包含了数据和业务逻辑(如何处理数据);View从Model处取得数据,并将它们表示出来,同时也负责向Controller传送用户的操作(action);Controller则翻译View发送过来的具体操作转送给Model处理,并且会根据这些操作来选择正确的View返回给用户。
参考"Java Blueprints - Model-View-Controller" (http://java.sun.com/blueprints/patterns/MVC-detailed.html)
从图上看,View和Model之间通讯的方式有两种,或者Model向View(事先已经向Model注册register)发送数据改变的通知,或者由View在需要的时候主动向Model查看数据是否更改。前者实时一些,但是会增加实现的复杂性和运行开销。后一种模式更常用。但是具体用哪一中模式还是要看实际应用的需求。一个Model可以对应多个实现,也就是Model : View是1:n。
Controller和Model之间的关系是单向的,即只有Controller调用Model,而Model不和具体的Controller发生其它的关系。
View是由Controller选择的,所以,通常,一个View只会将用户的交互传给一个Controller。看上去,似乎一个Controller可以对应多个View,但是Controller选择View的结果实际上是由用户和View的交互唯一决定的,一般来说,一个Controller只会处理一个View传来的用户交互信息,从这个意义上说,Controller和View之间是一一对应的。
View直接和用户交互,而Controller需要能够解释这些交互的动作,两者都不能脱离用户环境,所以开发新的用户界面的时候,Model可以保持不便,但是View和Controller都需要重新编写。Controller在服务对象上的近似性,迷惑了很多人对这两者之间关系的认识。http://www.phppatterns.com/index.php/article/articleview/11/ 文中,作者在实例介绍MVC的时候,Controller就是从View中派生出来的,无形之中,MVC结构在这里简化成了MV结构。回复中"captain proton"的发言也提到这一点错误。
更多信息,可以参考上面的两个连接。推荐第二篇的回复,思路很清晰。



