`
leeseon
  • 浏览: 100558 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

MVC不简单!

阅读更多

这两天在为一重构的最后一步而头痛,因为有三个函数,总体上的算法是基本上一样,只是因为在取数据的方式上有一点点的不同,如何将这三个函数重复的部分合并在一起,有点让我心烦,因为可以选用的办法有两种,一个是使用Template Method模式,或者是strategy模式。本来这两种方法都可以解决这个问题,不过选择上是一点点让我为难:

如果用template method的话,就需要从中提取出一个更抽象的基类,但这三个函数的所有者之间的关系却看不出来拥有这样的一个共同基类的概念,如果硬抽出来会比较怪怪的;那这样就简单了,用strategy嘛,不过问题是抽出一个strategy却好象strategy类的接口的语义性不强,或者说是接口的内聚性也不太好,看上去总是有点点怪怪的。

或者别的重构方法会是更好的办法?噢,也许,不过我不知道,也没有想出来。

只好将这个方案拿出来与办公室的大师讨论,呵呵,大师果然是大师。看了一下我的代码与整体设计之后,明确的告诉我,的确这两种重构方法都对我的这个实现来说都不是好的方法。我听了之后感到有点释然也有点懊恼,那怎么办?

大师一语道破天机:其实这个问题是出在架构上,现在从底层来改,怎样都弥补不了架构上的缺陷。唉,汗啊。真正根本的解决之道,就是从架构上重构,怎样重构?用MVC模式,再重新对程序分析设计一次。

嗯?MVC,晕,MVC我都已经明白很多年了,不至于吧。心中还隐隐有些不太信服。姑且听听吧。一听之下,才发现自己当年的理解是何等的肤浅,唉。

MVC的原理这个是简单的,思路也是明确的。但是MVC真正最难的地方就是怎样来划分M与V,从而将需要的功能分派在M与V中,对于C则更简单一些,可以将联接M与V的并且都不属于M与V的部分放在C中,总体上来说,M的可重用性会更高一些,而V的可重用性会低一些,而C则更低一些。

现在的问题是,究竟什么样的东东是属于M,而什么样的才是属于V的呢?嗯,这里的原则其实并不麻烦的,只要是可能会呈现成两种方式的东东,都应该是M的。M是应该永远不知道自己会呈现成什么样子的。而与呈现密切相关的就自然是属于V的,并且要将V最好抽象的比较薄,这样才比较好,V最好是不需要知道自己要显示的数据是什么意义,它只需要将内容给它,它就直接拿来显示就可以了。

但是问题是,对于象word或者报表之类的系统,它的显示逻辑也是复杂的一部分,这就注定V的那一层会显得比M重得多。那怎么办?噢,其实V本身也应该是可以分层的,V自身也是可以再分解成V与M的嘛,这样来说其实GDI API这一层本身就应该是最外的一层V了,而呈现的一些内在逻辑则可以考虑成M了。

嗯,受益良多啊,虽然我对这么薄的M与这么重的V还心存疑虑,但总体上却感觉有很多收获,而且看到了对自己在MVC理解上的盲点。

为了去除心头上的疑虑,我又再读了一次GOF的DP的等二章,那一章也正好是讲到了一个类似Word的系统的设计方案。一读之下,才发现,果不其然,原来GOF的设计也是这样的啊,唉!看来我是天生有一些驽钝啊。

呵呵,今天先说到这,下次再将更详细的感受写出来吧。且听下回分解!

分享到:
评论

相关推荐

    ASP.NET MVC 2.0 简单实例(无数据库,一看就懂)

    ASP.NET MVC 2.0 简单实例,3个模型,无数据库,一看就懂。

    C# MVC留言板v2.6.2源码

    简单的mvc2留言本,适合新手了解mvc2架构! 功能介绍: 1,会员注册登录 2,发布留言 3,管理员回复/编辑/删除留言 新版本说明2.6.2: 该版本修改内容: 1,对栏目导航做了点小修改 2,导航上的我要留言已经去掉,栏目...

    asp.net MVC5简单小例子

    这个项目是一个简单登录-注销-发表内容-删除内容的程序。有兴趣的可以自行扩展其他功能,由于作者对前端css样式不太熟悉,界面比较丑,但是功能都有,大家见谅

    javaEE简单MVC模式案例

    javaEE简单MVC模式案例

    Unity 工具类 之 简单的 MVC 框架使用实现简单的案例demo

    Unity 工具类 之 简单的 MVC 框架使用实现简单的案例demo 1、单例类,保证整个场景中只有一个类管理相关类; 2、MVC 每个 每个独立成快,又有简单的联系; 3、MVC 框架简单如下图; 4、换种形式的 MVC 业务流程 ...

    asp.net mvc 分页控件 包含ajax分页 最简单

    同时支持MVC2 MVC3并有简单sample.非常简单。我相信大部分人能看懂我的sample 使用: 1、引用我的DLL 2、自己要坐分页的Model继承至 INetMvcPage 3、在页面上 @PageHtmlHelper.PartialPage(Model) 就是底部页码条 三...

    Asp.net MVC会员管理系统.rar

    功能比较简单,主要是用户登录、注册(注册后需要审核才能使用)及信息修改等,采用Asp.netMVC开发 管理后台有用户管理、角色管理、邮件配置等功能 花了五天时间,终于做好了asp.net mvc后台管理系统,但mvc传递...

    Spring-MVC框架简单实现

    代码为本人查看源码后,对于SpringMVC的理解,搭建的简易版框架,与源码有一定差距,主要是用于理解SpringMVC框架。如有不实之处,请予以指出。

    Spring MVC 入门实例

    首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController ...

    vs2010 beta2 +asp.net mvc2简单开发示例教程

    网上有的全是VS2008+MVC1的文章,那些示例,完全不能在VS2010+MVC2中运行,所以我记录下来,希望能够对你的学习起到帮助的作用。 dongtso 2009.1.1 MSN:dzhqi@msn.com QQ:5628218 技术支持站点:...

    ASP.NET MVC2 简单新闻管理程序

    详细内容请看 http://blog.csdn.net/bluedoctor/archive/2011/01/07/6122809.aspx 新闻的数据处理使用了PDF.NET数据开发框架,整个实例程序绝对简单易懂。 发布的程序中删除了ASP.NET成员数据库,不影响使用。

    MVC模式的简单图书管理程序

    我用MVC模式写的图书增删查改程序,重要的不是实现了什么功能,而是这个程序的结构非常清晰,而且我也加了大量的详细的注解。我当时也是弄了半天才搞清楚的。不是很清楚MVC模式的人可以去参考一下,看了你就明白了。...

    ASP.NET MVC 4高级编程 第4版PDF.rar

    截至目前最新版本是MVC5,相对于之前的版本MVC5其可扩展性、易用性等方面都不很大的改进。 身为.NET平台的一员我们应该去了解或者是深入的研究,跳出托控件、简单三层、后台事件等等习惯和风格。 《ASP.NET MVC 4...

    最简单的PHP MVC留言本实例

    写完那篇“写给懂C语言的人的PHP基本语法入门”后一直在学习PHP5的OOP,目的很简单,就是想研究MVC的PHP实现,所以,兴趣很快转移到MVC上面,网上有很多长篇大论,但是看完了我还是不能写出一个最简单的MVC程序,我...

    MVC简单增删改查+分页

    主要适用于初学mvc玩家,对mvc不太了解的可以看看,该资源主要是对于c#知识的一个回顾,运用到很多c#学过的知识点

    ExtJs 4.1 mvc 简单示例

    本例是从官方网站示例下载整理解决win7不显示json问题,ExtJs 4.1 mvc 简单示例

    中文版小MVC

    一个简单的中文版MVC代码(代码中能中文都用中文的)可用于英文超级差的人认识MVC底层代码意思。只用于理解,不推荐啦啦啦啦。最后密码是【1433223】

    MVC创建电影数据库应用程序源码

    本源码将给你一个构建ASP.NET MVC应用程序既简单又有别于构建Active Server Pages或ASP.NET Web Forms 应用程序经历的理念。 电影数据库应用程序概览 我们将会构建一个非常简单的电影数据库应用程序。我们简单的电影...

    asp.net MVC三层架构

    例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。 MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。这个适合刚接触三层架构的来学习,...

Global site tag (gtag.js) - Google Analytics