MVC就是个选择题

标签: mvc 选择题 | 发表时间:2011-01-01 01:28 | 作者:(author unknown) Dash
出处:http://sexywp.com
Shared by e6nian
有思考总比没思考好

由于采用了Web开发框架来开发项目,所以我首次在真正的项目中采用MVC的开发模式。随着项目的不断深入,我也在不断反思,MVC设计模式到底给项目带来了什么?成倍的开发时间?复杂无比的目录结构?铺天盖地的文件数量?听起来都很难听对吗,但是确实如此。那么MVC所许诺的那些好处呢?清晰的代码结构,易于维护,易于扩展?真有吗?

当然,我不是在批判MVC,只是觉得,在使用MVC过程中,还是需要投入更深入的思考,到底怎样才能用好这个设计模式。MVC给我的感觉是,要求使用其的开发者有更高的觉悟,来正确选择存放一段代码的地方。从而实现解耦合,代码复用,和易于维护。为什么说使用MVC会有成倍的开发时间,主要就是因为在开发中,我们需要更多的时间去思考,这些代码放在哪里更合理一些。在MVC框架下代码被切割成一个又一个的小文件,分散在复杂的目录树中,那么到底怎样选择把代码写在哪里呢?这道选择题,并非有看起来那么容易。就我个人感受而言,更多的时候,无论将代码放在哪里都可以正确实现你的逻辑,MVC不是什么神兵利器,并不能通过其模式本身的约束,将开发者导入到一个正确的轨道上,反而会因为开发者本身错误的选择而让MVC自己变得一团糟。所以说,当一个团队确定要在一个项目中引入MVC时候,应该思考一下,每个团队成员是不是真的都有能力驾驭,如果没有对应的能力话,是不是要考虑前期对项目成员进行一定的培训。

可能我说得话很装逼,但是我绝对不敢以一个专家的身份站到这里来说话,我只是一个初学者,我要把我的学习感受说出来。现在回归到MVC上,Controller给我的印象是一个协调者的形象,它知道谁能干什么,然后分配任务,构造哪个对象,初始化哪个视图,是Controller应该决定的事情。Model呢,应该是一个实干家的形象,负责所有肮脏而又细致的事情,所以我在编码实践中,将所有的业务逻辑都塞进Model里面,对Controller,提供一个简单接口,对Views,输出纯数据。View则是一个消费者的形象,给其的数据都是纯粹的,直接显示即可以。以上是我对MVC这道选择题给出的一个答案,当然我不是很确定这样做很对。

我在项目中就看到过这样的代码,将Model做成了一个工具箱,实际上是一个有各种方法的对象,每个方法看起来也提供了简单的调用接口,实际跟Controller配合时候呢,由Controller来操纵功能,安排各个方法被调用的顺序。这等于是由Controller来执行业务逻辑,但是却又对其封装了每个步骤的细节。而我个人倾向于连业务逻辑也对Controller封装。这两种选择各有优劣,而实际上从短期也难看出来谁更剩一筹。甚至,等项目上线后,最终也没法发现哪个做法更优一点。

所以说,MVC真的就是一个选择题。你有多重选择来实现同一个目的。我列举的例子只是九牛一毛,在实际项目开发中,还面临着更多的选择问题。我想,到底怎样交出自己的答案,还是应该在实践过程中不断积累,不断优化。我们只要把握好一些原则,就可以让自己不要偏离航向太远。第一,可维护性,代码逻辑一目了然应该是写代码时候的第一追求,因为看别人的代码是非常痛苦的,甚至最后回头来看自己写过的代码可能都会很痛苦,保持代码一目了然才是最重要的,给别人,给自己节省下时间。第二,可复用性,写内聚度高的代码,减少依赖,判定很简单,我写的这个代码,拷贝到别的项目里,是不是直接就能用,时刻问自己这个问题,就能保持代码的高内聚度。第三,封装变化,这个原则总体来说很难把握住,我自己的体会就是尽可能提供一个强大的接口,如果XXX改变了,那么调用我写的函数是不是格式不变?如果你写的函数,一会儿增加个参数,一会减少个参数,那么所有调用的地方都会跟着变化修改。

就到此为止了,一些愚见,请大家指正。

标签:design pattern, MVC

相关 [mvc 选择题] 推荐:

MVC就是个选择题

- Dash - Becomin' Charles
由于采用了Web开发框架来开发项目,所以我首次在真正的项目中采用MVC的开发模式. 随着项目的不断深入,我也在不断反思,MVC设计模式到底给项目带来了什么. 听起来都很难听对吗,但是确实如此. 清晰的代码结构,易于维护,易于扩展. 当然,我不是在批判MVC,只是觉得,在使用MVC过程中,还是需要投入更深入的思考,到底怎样才能用好这个设计模式.

MVC演化史

- huige - 火丁笔记
Martin Fowler在他所写的《企业应用架构模式》一书中感慨道:MVC已经成为我们最常误用的模式. 人们之所以常常误用MVC,很大程度上是因为混淆了不同的MVC变体. 大概上世纪七十年代,Xerox PARC的Trygve提出了MVC的概念,并应用在Smalltalk系统中,为了和其它类型的MVC加以区分,历史上习惯的称之为Classic MVC.

Spring MVC 和 Struts2

- - CSDN博客架构设计推荐文章
Web层面的框架学习了三个Struts1和2,SpringMVC,那他们之间肯定存在一个优劣和适用的环境,Struts1和2的异同点我已经做过对比《 Struts1和Struts2》,这篇将对比下Struts2和SpringMVC的异同,下面数据基本来源于网络,本人是搜集整理所得,供大家参考. 一个项目使用什么样的技术,决定的因素很多,我所能想到的有:对系统的性能、开发的效率、团队学习的成本、业务场景等,下面尽量从这几个方面入手,来分析比较下他们之间存在的优劣.

最佳MVC实践

- - CSDN博客架构设计推荐文章
原文地址 http://www.yiiframework.com/doc/guide/1.1/zh_cn/basics.best-practices 最佳MVC实践(Best MVC Practices). Although Model-View-Controller (MVC) is known by nearly every Web developer, how to properly use MVC in real application development still eludes many people.

srping mvc RequestMapping实现

- - CSDN博客推荐文章
spring mvc中定义请求的url只需要在方法上添加注解: @RequestMapping("aa.mvc")即可定义访问的url地址,但是你是否有考虑过为什么添加这个注解就可以实现url访问地址的定义了呢. 首先定义注解RequestMapping. mvc中常需要对输入值进行合法性校验,所以也定义了校验的注解MyValid.

表现层模式-MVC

- - 博客园_首页
       在前面简述了从服务层到数据层参见 架构设计目录. 剩下了表现层,一个再好的中间层表现也必须有一个用户界面,提供和用户交互,将用户行为输入转化为系统操作,进入后台逻辑. 在当下RAD(快速应用开发)工具的支持下,我们可以比较快速的完成UI设计,RAD追求所见即所得的快速反馈,快速应用.

三层架构与MVC

- - CSDN博客推荐文章
MVC是Model View Controller , 是模型-视图-控制器的缩写,一种软件设计典范.用于组织代码用 一种业务逻辑和数据显示分离的方法,这个方法的假设挑剔是如果业务逻辑被聚集到一个部件里面,而且界面和用户围绕数据的交互能被改进和个性化指定而不需要重新编写业务逻辑.. 三层架构是最基本的项目分层结果,而MVC则是三层架构的一个变体,MVC是一种好的开发模式.

Spring MVC 3 深入总结

- - 企业架构 - ITeye博客
大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了. Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀. 官方的下载网址是: http://www.springsource.org/download   (本文使用是的Spring 3.0.5版本).

Spring MVC 与 web开发

- - 码蜂笔记
项目组用了 Spring MVC 进行开发,觉得对里面的使用方式不是很满意,就想,如果是我来搭建开发环境,我会怎么做. 下面就是我的想法,只关注于 MVC 的 View 层. 现在基本上都是用 ajax 来调用后台接口,拿到 json格式的数据再展示,有的人直接返回数据,却没有考虑异常的情况,我觉得返回的报文里必须包含表示可能的异常信息的数据和业务响应数据.

Spring MVC的常见错误

- - Java译站
10年前我开始自己的职业生涯的时候,Struts还是市场上的主流标准. 然而多年过后,我发现Spring MVC已经越来越流行了. 对我而言这并不意外,因为它能和Spring容器无缝集成,同时它还提供了灵活性及扩展性. 从我迄今为止对Spring的经验来看,我发现有不少人在配置Spring的时候经常会犯一些常见的错误.