拼吾爱程序人生

首页 » .Net编程 » C# » C#版MVC框架PureMVC的深入分析和改良方案
cobra - 2008-9-21 9:43:00
在PureMVC中,通知(Notification)贯穿整个框架,把观察者模式发挥得淋漓尽致。MVC的三层通信都是通过Notification来通信。Notification由两部分组成:Name和Body。如果把Notification当作是邮件,那么Name就是收件人,不过在PureMVC中可以有多个观察者(Observer)接收相同的邮件,Body自然就是Notification的内容了。Notification和Observer的关系是1:N,这点可以从View层的代码中看出来。


Code




Observer有两个属性:


Code



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


Code



来执行notify这个方法。
  PureMVC中,注册Observer和通知Observer都是在View层进行的。


Code



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

 附件: 您所在的用户组无法下载或查看附件
在PureMVC中有一个类叫Notifyer,根据字面的意思,它应该是Notification的传递都,也就是邮差才对。然而这个类却不做自己的本职工作---给Observer发送通知,而是把所有通知都推给了Facade,再由Facade通过View来把Notification发送给Observer。发个通知也一波三折,我觉得这样设计不够合理。前面我已经创建了观察都的公司Obsertor了,那么Notifyer只要直接把Notification发送到Obsertor就可以了,Obsertor会把Notification发给具体的Observer。现实中的公司都是这样子的吧,经常都是前台告诉我,我的包裹到了。因此,应该让Notifyer做回它的本职工作。

 附件: 您所在的用户组无法下载或查看附件
PureMVC的C#版本在Mediator的注册上存在着点BUG,注册Mediator的部分代码:


Code




它的本意是避免Mediator的重复注册,然后当页面重新加载时,mediatorMap里的Mediator的视图已经过时了,这样就导致了无法更新页面。我的解决方法是


Code



局部更新一下ViewComponent,这样就运行正常了。





(文/reallypride  出处/博客园)

 您可能对 [C#] 的这些文章也感兴趣:

用C#实现文件下载器(2)
小议Focus()方法
C#25个问题
c#中使用DateDiff
C#下实现动态系统托盘图标
多线程在VisualC#网络编程中的应用
如何捕捉控制台程序的关闭事件
C#基础学习——异步编程篇
在.Net环境下用C#操纵活动目录
C#特性(Attribute)入门(二)
1
查看完整版本: C#版MVC框架PureMVC的深入分析和改良方案
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: