C#版MVC框架PureMVC的深入分析和改良方案

在PureMVC中,通知(Notification)贯穿整个框架,把观察者模式发挥得淋漓尽致。MVC的三层通信都是通过Notification来通信。Notification由两部分组成:Name和Body。如果把Notification当作是邮件,那么Name就是收件人,不过在PureMVC中可以有多个观察者(Observer)接收相同的邮件,Body自然就是Notification的内容了。Notification和Observer的关系是1:N,这点可以从View层的代码中看出来。

observerMap = new Dictionary<String, IList<IObserver>>();

Observer有两个属性:

private String notify;
private Object context;

notify是方法名,context是方法的载体。当Observer接收到Notification时,将调用下面的方法

public void notifyObserver(INotification notification)
{
      Type t = this.getNotifyContext().GetType();
      BindingFlags f = BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase;
      MethodInfo mi = t.GetMethod(this.getNotifyMethod(), f);
      mi.Invoke(this.getNotifyContext(), new Object[] { notification });
}

来执行notify这个方法。

PureMVC中,注册Observer和通知Observer都是在View层进行的。

public interface IView
{
void registerObserver (String notificationName, IObserver observer);
void removeObserver(String notificationName, Object notifyContext);
void notifyObservers(INotification note);

我觉得这点设计得不太好,使得View层和Observer产生了耦合,这些事情本不应该由View层来做的。而且,Observer接收的Notification不仅仅来自于View,还会来自于Controller和Model,那么,根据AOP的原则,应该把这部分的操作应该从MVC层的纵向分离出来,改为横向模式。可以创建一个观察者公司Obsertor(暂且这样叫它吧)来统一管理观察者,这样就可以减轻View层的工作了。结构图如下:

时间: 2024-08-04 06:13:01

C#版MVC框架PureMVC的深入分析和改良方案的相关文章

AngularJs:Javascript MVC框架

在6月google发布了AngularJs 1.0稳定版, 并宣称:AngularJS可以让你扩展HTML的语法,以便清晰.简洁地表示应用程序中的组件,并允许将标准的HTML作为你的模板语言,AngularJS可以通过双向数据绑定自动从拥有JavaScript对 象(模型)的UI(视图)中同步数据. 开始接触AngularJs是在4月份来到新项目组,这时AngularJs还处于0.8未稳定版,项目中已经开始使用了,并且这套框架应用到了项目整个UI端,服务端也是未稳定的web api,真心佩服团队

将ASP.NET MVC框架应用巧妙移植到手机

客户对我们的产品质量非常满意,因此在该项目完成后又给了我们另外一个订 单,即部署客户程序到Windows智能手机设备上.但是我们项目团队成员以前都没 有这种开发经验.我们的计划是通过最小限度的修改现有程序代码,使其可以运 行在Windows智能手机上. 移动设备Web应用工具箱(Web Application Toolkit for Mobile Devices) 我们选择了微软移动设备Web应用开发工具箱作为解决方案.使用这个免费的 工具,可以轻松将基于MVC框架的Web应用扩展到移动设备上.

安装ASP.NET MVC框架到中文VS2008

最近好友幻想曲告诉我用Mvc framework吧,开始我还以为又是什么乱七八糟的 框架,本着对客户负责的态度并没有去仔细研究什么.这几天有时间闲下来做技术 反思,感觉微软是不会搞出个没用的东西的,于是把MVC框架下下来研究. 运行文件AspNetMVCPreview2-setup.msi进行安装,安装完成后发现在VS2008里 面并没有MVC模板出现.又到处Google了一遍,发现有不少人遇到这个问题,但是 还没看到完全解决的办法. 目前遇到问题的基本集中在Microsoft Visual S

从MVC框架看MVC架构的设计(转)

尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点.本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些问题的,揭示其中所折射出的设计思想与设计理念. MVC回顾 作为一种经典到不能再经典的架构模式,MVC的成功有其必然的道理,这个道理不同的人会有不同的解读,笔者最认同的一种观点是:通过把职责.性质相近的成分归结在一起,不相近的进行隔离,MVC将系统分解为模型.视图.控制器三部分,每一部分都相对独立,

为什么我不再使用 MVC 框架?

Jean-Jacques Dubray 是一名资深工程师,他最近引入了一个新的模式:状态-行为-模型(State-Action-Model,SAM).SAM 是一个函数式反应型的编程模式,它致力于简化数据 Model 和 View 之间的交互.它究竟有何优点值得作者弃用 MVC 呢? 话题起因 在我最近的工作中,最让人抓狂的就是为前端开发人员设计 API.我们之间的对话大致就是这样的: 开发人员:这个页面上有数据元素x,y,z-,你能不能为我创建一个 API,响应格式为{x: , y:, z:

[转自Scott]ASP.NET MVC框架(第一部分)

英文原文地址:http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx 翻译原文地址:http://blog.joycode.com/scottgu/archive/2007/11/14/111385.aspx 两个星期前, 我在博客里讨论了ASP.NET的一个新MVC(模型.视图,控制器)框架,我们将在不久的将来作为一个可选功能来支持.该框架提供了一个结构化的模型,来加强应用中的清晰关

[转自Scott]ASP.NET MVC框架(第四部分): 处理表单编辑和提交场景

英文原文地址:http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx 翻译原文地址:http://blog.joycode.com/scottgu/archive/2007/12/10/112465.aspx 过去的几个星期内,我一直在写着讨论我们正在开发的新ASP.NET MVC框架的系列贴子.ASP.NET

[转自scott]ASP.NET MVC框架 (第二部分): URL路径选择

英文原文地址:http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx 翻译原文地址:http://blog.joycode.com/scottgu/archive/2007/12/04/112249.aspx 上个月,我发表了我要撰写的系列贴子中的第一篇,这些帖子将讨论我们正在开发的新ASP.NET MVC框架.这个系列的第一个贴子建造了一个简单的电子商务产品列

现有ASP.NET MVC框架应用巧妙移植到手机

客户对产品质量非常满意,因此在项目完成后又给我们另外一个订单,即部署客户程序到Windows智能手机设备上.但是我们项目团队成员以前都没有这种开发经验.我们的计划是通过最小限度的修改现有程序代码,使其可以运行在Windo智能手机上. 移动设备Web应用工具箱(WebApplicationToolkitforMobileDevices) 我们选择了微软移动设备Web应用开发工具箱作为解决方案.使用这个免费的工具,可以轻松将基于MVC框架的Web应用扩展到移动设备上. 下载地址: http://co