`
leeseon
  • 浏览: 104109 次
  • 性别: 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的设计也是这样的啊,唉!看来我是天生有一些驽钝啊。

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

分享到:
评论

相关推荐

    MVC实例!初学者可以看看!

    通过这个简单的MVC实例,你将能够建立起对Web应用开发的基础认知,为进一步学习更复杂的框架和高级技术打下坚实基础。在实践中不断探索和深化理解,你会发现MVC模式是构建高效、可扩展的Web应用的强大工具。

    MVC简单例子C#

    在这个"MVC简单例子C#"中,我们将深入探讨这种模式以及如何在C#环境中实现它。** **一、MVC模式概述** MVC模式将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据...

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

    在这个“ASP.NET MVC 2.0 简单实例”中,我们将探讨如何在没有数据库的情况下创建一个简单的应用。 首先,让我们了解MVC架构的核心组件: 1. **Model**:模型是应用程序的核心部分,包含业务逻辑和数据。在这个...

    C++的MVC模式简单示例

    **C++中的MVC模式详解** MVC(Model-View-Controller)模式是一种软件设计模式,广泛应用于构建用户界面,特别是在Web开发和图形用户界面(GUI)应用中。C++作为一个强大的面向对象编程语言,同样可以利用MVC模式来...

    MVC的简单介绍

    在MVC模式中,客户端不直接操作数据库,而是与控制器Servlet通信。 **总结** MVC模式通过分离关注点,使得开发者可以独立地修改或扩展模型、视图和控制器,从而降低了复杂性,提高了代码的可重用性和可测试性。在...

    springboot MVC简单demo

    SpringBoot MVC简单Demo详解 SpringBoot是Spring框架的一个简化版,它旨在简化Spring应用程序的初始搭建以及开发过程。MVC(Model-View-Controller)模式是Web应用开发中常用的一种设计模式,SpringBoot结合MVC提供...

    一个简单的mvc实例

    总结,这个简单的MVC实例为我们提供了一个理解MVC模式如何应用于实际项目中的示例,尤其是对于初学者来说,它能帮助我们更好地掌握J2EE环境下的MVC架构,从而提升我们的Web开发技能。通过分析stu.sql和Student,我们...

    Winform下最简单易懂的MVC实例

    在本文中,我们将深入探讨如何在Winform环境下实现一个简单的MVC(Model-View-Controller)模式。MVC是一种设计模式,它将应用程序分为三个主要组件:模型、视图和控制器,以提高代码的可维护性和可扩展性。在...

    C++实现简单的MVC框架

    本项目是用C++实现的一个简单的MVC框架,名为MVCDemo,旨在帮助开发者理解MVC设计模式的基础概念。 首先,我们来详细解释MVC的三个组成部分: 1. Model(模型):模型层是应用的核心,它负责管理数据和业务逻辑。...

    DotNet MVC 简单介绍

    由于MVC架构的解耦特性,编写单元测试和集成测试变得相对简单。你可以针对控制器、模型和视图助手编写测试,确保每个组件按预期工作,提高软件质量。 ** Areas 和多层应用结构** 大型项目可能需要更复杂的结构。...

    MVC EF 简单增删改查

    在ASP.NET MVC中,使用EF实现增删改查(CRUD)操作相对简单。以下是一般步骤: 1. **创建模型类**:定义一个表示数据库表的类,例如`Student`,包含属性如`Id`、`Name`和`Age`。 2. **配置上下文类**:创建一个...

    spring mvc的简单单元测试

    下面是一个简单的Spring MVC单元测试示例: ```java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure....

    mvc vs2008 简单实例

    标题"mvc vs2008 简单实例"指的是使用Microsoft Visual Studio 2008(VS2008)开发一个基于Model-View-Controller(MVC)架构的简单应用实例。MVC是一种设计模式,广泛应用于Web开发中,它将应用程序的业务逻辑...

    ASP.Net MVC3.0 简单实例

    在这个"ASP.Net MVC3.0简单实例"中,我们能看到一个基本的Web应用程序,其核心功能包括增删改查操作,并且与数据库进行了集成。此外,还有AJAX的应用,以提供更流畅的用户体验。 首先,让我们详细了解一下ASP.NET ...

    Mvc+NHibernate简单示例

    **Mvc+NHibernate简介** Mvc(Model-View-Controller)是一种设计模式,广泛应用于Web开发领域,它将应用程序的逻辑分为三个...这个简单的示例项目"MvcApplication1"为初学者提供了一个学习和实践这两种技术的起点。

    一个简单的MVC代码

    现在,我们来详细探讨这个简单的MVC代码实现。 首先,`www.pudn.com.txt`可能是一个文档,包含了有关代码的说明或者源代码的一部分。由于没有提供实际的内容,我们无法直接分析其中的细节,但通常这种文本文件可能...

    C# MVC留言板v2.6.2源码

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

    MvcHtml(前端JS_简单MVC写法)

    **MvcHtml:前端JS实现简单MVC模式** 在前端开发中,Model-View-Controller(MVC)架构模式被广泛应用于构建复杂且可维护的用户界面。MVC将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器...

    mvc_three简单的代码 ,仅供参考

    在这个简单的代码示例中,`day03_mvc_three`可能包含了与数据库交互的类或接口,以及处理业务规则的对象。模型对象通常会封装数据,并提供方法来操作这些数据。它们不关心如何显示数据,只关注数据的存储和处理。 2...

Global site tag (gtag.js) - Google Analytics