首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

PureMVC 架構深度剖析與 C# 改良方案:解耦觀察者模式、修正 Mediator 註冊缺陷

     編輯:關於C#

PureMVC 以 Notification 為核心貫徹觀察者模式,MVC 三層通訊全賴其傳遞。本文分析其架構缺失,提出針對 C# 特性的改良方案。

現有架構痛點

View 層過度耦合 Observer 管理


observerMap = new Dictionary<String, IList<IObserver>>();
public interface IView {
    void registerObserver(String notificationName, IObserver observer);
    void removeObserver(String notificationName, Object notifyContext);
    void notifyObservers(INotification note);
}

View 直接管理 Observer 註冊與通知,違反單一職責原則。Controller、Model 亦需透過 View 發送通知,造成縱向耦合。

Notifier 職責不清

Notifier 應專責通知分發,實際卻將通知轉交 Facade 再經 View 分發,流程繞彎。

Mediator 註冊 Bug


public void registerMediator(IMediator mediator) {
    if (mediatorMap.ContainsKey(mediator.getMediatorName())) return; // 頁面重載時 ViewComponent 過期
}

重複註冊檢查導致頁面重載時無法更新 ViewComponent。

改良方案:引入 ObserverHub 橫向解耦

改良架構圖

  • 建立 ObserverHub 統一管理 Observer 註冊、移除、通知分發
  • View、Controller、Model 僅依賴 ObserverHub 介面,消除縱向耦合
  • Notifier 直接委派 ObserverHub 分發通知,回歸本職

修正 Mediator 註冊邏輯


public void registerMediator(IMediator mediator) {
    if (mediatorMap.ContainsKey(mediator.getMediatorName())) {
        mediatorMap[mediator.getMediatorName()].setViewComponent(mediator.getViewComponent());
        return;
    }
    // 原註冊邏輯...
}

同名 Mediator 重複註冊時更新 ViewComponent 而非忽略,解決頁面重載視圖過期問題。

通知流程改良前後對比

後續將依此方案重構 PureMVC C# 版本並釋出原始碼,敬請期待。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved