1.
如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论。
MVC模式就是架构模式的一种,它对我的启发特别大。我觉得它不仅适用于开发软件,也适用于其他广泛的设计和组织工作。
下面是我对MVC模式的一些个人理解,不一定正确,主要用来整理思路。
2.
MVC是三个单词的首字母缩写,它们是Model(模型)、View(视图)和Controller(控制)。
这个模式认为,程序不论简单或复杂,从结构上看,都可以分成三层。
1)最上面的一层,是直接面向最终用户的"视图层"(View)。它是提供给用户的操作界面,是程序的外壳。
2)最底下的一层,是核心的"数据层"(Model),也就是程序需要操作的数据或信息。
3)中间的一层,就是"控制层"(Controller),它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。
这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。
3.

我用Windows的计算器小程序为例,解释一下MVC模式,虽然它不一定使用这个模式编写。
在这个计算器程序中,外部的那些按钮和最上面的显示条,就是"视图层",那些需要运算的数字就是"数据层",执行加减乘除的那些内部运算步骤就是"控制层"。每一层执行不同的功能,整个程序的结构非常清楚。
如果我们扩大一点想象,就会发现,很多程序本质上都是这种模式:对外提供一组触发器(本例中是按钮),然后执行一些内部操作,最后返回结果。因此,MVC模式的应用是非常广泛的。
4.

在我看来,不仅编写程序可以用MVC模式,家用电器也可以用。
以家用微波炉为例,可以将它也理解成三层结构。最简单的情况下,微波炉的操作用两个转盘实现,一个控制温度,另一个控制时间。这两个转盘就是"视图层"(view),而其内部的微波产生装置则是"数据层"(Model),这里的"数据"需要理解成"核心功能"。至于将用户通过转盘输入的信息,转换成对微波产生器的操作,则用"控制层"来实现。
如果每一层都是独立的,那么微波炉外部更换一个新潮的外壳,或者内部更换更大功率的微波产生器,完全可以在不更改其他层的情况下实现。这就是MVC模式的优势。
5.
再进一步,如果将MVC模式解释成"外观"、"机制"和"功能/数据"这三层结构,那么很多人类组织也可以通过MVC模式架构。
比如一家商场,完全可以分成三部分。一部分是仓库,负责提供商品,这是"功能层"(或者"数据层");另一部分是零售铺面,负责销售商品,这是它的"外观层";两者之间就是"机制层",包括柜台和仓库之间一切互动的机制。
这样区分以后,这个商场的结构就变得非常清楚,可以针对不同的层进行优化,提高效率。
6.
公司、政党、政府、医院、学校等等,这些组织不管是盈利性还是非盈利性的,都可以从MVC模式的角度,进行架构,由一个个执行特定功能、可重复使用的模块组成。
我在想,如果人类社会都是模块化结构,那会是怎样的情景?
(完)



Blue Daniel 说:
事实上很多人类社会中的组织都是模块化的,只有模块化才能更好的分工,实现specialization,提高效率。
另,其实计算机中的很多概念,包括模块化,都是模拟人类社会学来的,比如hyperlink就是来自人的associative memory。计算机本来就是人的发明,不可能脱离人而单独存在
2007年11月 9日 05:22 | 档案 | 引用
IQ75 说:
……
不愧是文科生,真能联想,看得俺这个写代码的一脑门汗。
2007年11月 9日 10:19 | 档案 | 引用
爱自由的仙人掌 说:
最近做的项目也是MVC结构的,没想到在这里能看到MVC的介绍……
阮大侠的兴趣广泛啊
2007年11月 9日 11:55 | 档案 | 引用
tanner 说:
厉害厉害,“真正困难的是算法和结构,前者需要好的数学基础,后者需要对所要解决的问题有全面深刻的理解和规划”,太精辟了,富于微言大义的魅力。
但真正的好程序、好系统还在于扎扎实实的功底和努力,所谓细节决定成败。
一个干了10年的程序员
2007年11月 9日 12:08 | 档案 | 引用
tanner 说:
搞企业管理也有,人财物各有所司的说法。
2007年11月 9日 12:11 | 档案 | 引用
GandofYan 说:
无论是人也好,程序也好
只要确定好各个层次之间的通信接口
关心就会简单明确起来
2007年11月 9日 14:07 | 档案 | 引用
奔儿头 说:
现在ASP.net、JSP好像都有自带的框架,PHP没有。不过Zend公司好像一直在开发这样的框架。
2007年11月30日 16:48 | 档案 | 引用
Ayu 说:
呵呵,太有才啦。不是学计算机的都能理解得那么透彻!~~真的很佩服楼主啊!~~~
2007年12月20日 16:36 | 档案 | 引用
其他见解 说:
对一个模式的理解只是到这的话,学面向对象的第一课的同学就可以做到了,楼主不过只是玩玩软件吧
2008年5月 2日 17:21 | 档案 | 引用
wjfsanhe 说:
佩服,一个善于思考的头脑
2008年5月 4日 14:39 | 档案 | 引用
溪中 说:
如果你的职业是教师,估计是个不错的老师。
2008年5月14日 14:20 | 档案 | 引用
刘 说:
一看就是知道菜鸟,MVC模式怎么是三层结构呢.MVC是和种思想.
2008年9月21日 12:53 | 档案 | 引用
tonyrlh 说:
刘 说:
一看就是知道菜鸟,MVC模式怎么是三层结构呢.MVC是和种思想.
MVC不是三层是几层?
“思想”--你是那些没有什么技术只有理论的大学老师吧?很鄙视你们这种人,只会说这个是个思想,那个是个思想,到头来什么鸟东西也不会编,最近接了个活,是一所很有名的大学的老师们写的码,给他们反向工程和查BUG(刚毕业没多久什么活都揽),看了一眼是c++的东西,一细看,写得那个垃圾,系统设计得相当的烂,核心功能全在一个类里8000行代码.....还是教授写的?垃圾。码的其它问题都不好意思给他指出来。
人家是本科的,把mvc弄成这样不错了!!
再次鄙视那些个没有本事,很多知识都靠我们自学了四年的大学老师
2008年9月26日 13:05 | 档案 | 引用
123456 说:
其他见解 说:
对一个模式的理解只是到这的话,学面向对象的第一课的同学就可以做到了,楼主不过只是玩玩软件吧
你对模式理解很全面吗,在项目里能用得好吗?还是只会理论理论而已啊~~
那这些话题和一个文科生讨论,你的实力也太菜了吧~
我觉得对一个非计算机专业的人来说,写得不错。LZ继续努力。
2008年9月26日 13:19 | 档案 | 引用
tinner 说:
喷子果然无处不在
2009年3月 2日 09:11 | 档案 | 引用
strive 说:
虽然我还是第一次了解这个模式,但是我觉的这篇文章对我的启发很大,我也觉得很有道理,其实,那些说别人垃圾的,或者说别人是菜鸟的,我想你应该说的更具体点,把证据摆出来,何必逞口舌只能。谢谢楼主!!!
2009年5月14日 10:12 | 档案 | 引用
lijipei 说:
虽然无处不在,但他说的是正确的,呵呵,人要学会改正错误!
2009年6月 4日 15:45 | 档案 | 引用
macnie 说:
人家说的很好啊。看的我这个专业生都汗颜.
2009年6月11日 16:37 | 档案 | 引用
喷子闪开 说:
典型的面向对象思想...着实不错...
2009年7月14日 23:13 | 档案 | 引用
xxxx 说:
你所说的是一种分层的思想.. 这是不错地...
但是你的那些MVC例子 感觉有点牵强..
2009年8月23日 09:27 | 档案 | 引用
郭镇玮 说:
呵呵,真理就是简单,应用才是王道。能够分析出真样的道理,给你赞赏!
2009年12月13日 18:42 | 档案 | 引用
匿名 说:
我是个程序员。赞赏楼主的理解和解说能力,教初学者生会很有用。有些人自以为自己是个程序员,对程序了解多一点,就自以为很牛,不要以为自己就比非计算机人就对程序设计模式更有发言权,说别人理解不行。程序中的设计模式也是借鉴现实生活中的思想而来的,比如建筑工程学。计算机比现实生活中的某些东西出来晚多了。
有些人就是容易冲动和激动。稍微发点言,不顺自己的意,或者自己嫉妒啊,心里不爽就忍不住言辞激动了。
2009年12月15日 11:36 | 档案 | 引用
wangtao 说:
支持楼主。我觉得,将复杂的事情简单化,复杂深奥的东西简单化,那才叫真本事。
毛泽东是个文科生,兵法理论没学多少。他的大战思想好多都是从水浒传学来的。
2009年12月15日 11:48 | 档案 | 引用
佚名 说:
其实我觉得,回帖者都没有提到到楼主给我们带来的最经典的东西,也散发lz真正的文科生的魅力......我在阅读全文的时候,始终让我震聋发聩的是lz文章中的三个字:
方法论
这便是管理大师与工程大师的不同,
我问那么多程序员,你们编程序之前或在做一件事之前,会考虑"方法论"吗?
古语,磨斧不误砍柴功,其实就是 方法论
可是,很多本科的程序员,我招他进来帮我做软件,小程序他会很多,系统 他根本没概念,不知道怎么学的?
一位20年前学软件的学生,现在自己做老板.
2010年4月20日 22:17 | 档案 | 引用
AReader 说:
真正优秀的程序员一定是个极富思想的人。因为最终的程序表达是对事物的看法。
智商测的都是人对规律的把握,对不同的处理。从这个意义上说,只要人聪明,无论学文科还是理科工科,无非就是举一反三的学习能力。
2010年4月21日 16:34 | 档案 | 引用
一个刚刚入行的人 说:
楼主的文章很好,无论如何,让我这个刚接触此类东西的人受益匪浅,至少我对这有了个大体的认识,谢谢楼主
2010年7月 8日 17:04 | 档案 | 引用
菜鸟 说:
模型(model),视图(view),控制器(controller)完成的应用程序
由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
如此循环 .这是我的看法.
2010年8月25日 13:08 | 档案 | 引用
wsky 说:
MVC确实只是一种思想,并不一定要严格按照3层设计
2010年12月27日 10:08 | 档案 | 引用
losan 说:
软件工程是一个不仅仅只会编程就可以了,涉及到多种知识和学科 ,楼主讲的很好,深入浅出,受益匪浅!
2011年8月 9日 16:48 | 档案 | 引用
Darjeeling 说:
这个我觉得大家讲的都是很有道理的,只是侧重点不同而已罢了
2011年9月25日 16:52 | 档案 | 引用
oliver 说:
“如果人类社会都是模块化结构”那很可能就是一条通往奴役之路。
2012年1月 9日 16:24 | 档案 | 引用