程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#版MVC框架PureMVC的深入分析和改良方案(1)

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

編輯:關於C語言

在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層的工作了。結構圖如下:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved