2013-02-16 26 views
1

在我的應用程序中,我有不同的UI組件和它們的事件管理類。模塊化UI和事件管理模式

雖然我的初始想法是具有用於窗口和框架,然後一個窗口單獨的類將具有幀的組合物。

而且應該有發生的事件的創建和委託單個條目無論是在窗口或框架/控制水平。

但是,我無法總結出這種模式。

所以,目前結束了與直接連接到它們的相應的UI幀/控制單獨的事件處理程序。

請指導我爲這個用例選擇一個好的模式。

回答

0

EventAggregator模式應該是你的路要走。它完全將你的模塊從其他模塊中分離出來。通過這種方式,模塊不需要知道(或引用)另一個模塊。

你可以看到關於同一主題here我的另一個(更詳細的)答案。

如果你並不需要那麼多的鬆耦合(例如模塊具有參考對方),你應該看一看Observer pattern。這是實現分佈式事件處理機制的另一種方法。

+0

可能是我對選擇這種模式的看法,但它更多地是對命令模式的擴展,它帶來的額外好處是組件的同化沒有嚴格執行協議,命令模式引入了 – 2013-02-22 18:30:06

+0

正是!作爲附加信息,我建議你閱讀QT API文檔[這裏](http://qt-project.org/doc/qt-4.8/signalsandslots.html)和[文章](http://www.elpauer .org/stuff/a_deeper_look_at_signals_and_slots.pdf)解釋其基於觀察者模式的信號時隙機制,作爲分佈式事件處理的另一個良好實現。 – Hasan 2013-02-23 13:43:16

0

你在找什麼是Command模式。命令模式基本上允許您將請求/消息封裝到完整的對象中,以便請求消息的對象不必知道最終將處理請求的對象。例如,你有菜單項,按鈕等可以發射事件,基本上當你編寫這些元素時,你不知道誰將要處理這些事件(我假設你正在開發一個處理事件的UI框架)。因此,您基本上會在名爲Command的類中編碼關於事件接收者的信息,並且它會參考實際的接收者。它也將有一個execute方法,基本上會調用特定於域的代碼。你將有不同的Command類的子類來處理特定的請求,如CopyCommand,PasteCommand等。

abstract class Command { 
    private Receiver receiver; 
    public void setReceiver(Rceceiver receiver){ 
    this.receiver = receiver; 
    } 

    public Rceiver getReceiver(){ 
    return this.receiver; 
    } 

    abstract execute(); 
} 

基本上現在你可以使用setCommand API個體UI組件設置的命令。 UI組件只會委託給基礎命令。

class Button { 

private Command command; 

public void setCommand(Command command){ 
this.command = command; 
} 

public void onClick(){ 
    command.execute(); 
    } 
} 

欲瞭解更多詳細信息,看看GOF的書的命令模式。