PureMVC 以 Notification 為核心貫徹觀察者模式,MVC 三層通訊全賴其傳遞。本文分析其架構缺失,提出針對 C# 特性的改良方案。
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 應專責通知分發,實際卻將通知轉交 Facade 再經 View 分發,流程繞彎。
public void registerMediator(IMediator mediator) {
if (mediatorMap.ContainsKey(mediator.getMediatorName())) return; // 頁面重載時 ViewComponent 過期
}
重複註冊檢查導致頁面重載時無法更新 ViewComponent。

public void registerMediator(IMediator mediator) {
if (mediatorMap.ContainsKey(mediator.getMediatorName())) {
mediatorMap[mediator.getMediatorName()].setViewComponent(mediator.getViewComponent());
return;
}
// 原註冊邏輯...
}
同名 Mediator 重複註冊時更新 ViewComponent 而非忽略,解決頁面重載視圖過期問題。

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