2014-04-03 19 views
0

我試圖在C++中設計一個通信協議,並且想要抽象出協議的各個層,以便在將來可以更改它們,而無需更改整個應用程序。C++中的協議設計,循環類成員

到目前爲止,我已經設計了這個:

  1. 應用---如。氣候> SetTemperature(70);
  2. 模塊(如氣候)---例如。 protocol-> SetRegister(23,70);
  3. 協議層---例如。 msg [] = {0x4C,0x55​​,0x17,0x46}; comm-> SendPacket(msg);
  4. 通信層

在返回路徑上時發生該問題:

  1. 通信層
  2. 協議層
  3. 模塊
  4. 應用

我不真的應用程序不斷地向模塊詢問數據,然後模塊詢問協議,協議詢問通信層,但每個類中的回調「冒泡」數據看起來很混亂。通常情況下,只有通信層纔會知道是否有任何值得進一步處理的數據(通過協議層等)

是否有更好的設計模式?

+1

問題是什麼? – jsantander

+1

這是標準的東西。 [事件和觀察者](http://en.wikipedia.org/wiki/Observer_pattern)。亂?我不知道,每個人都這樣做。 –

+0

雜亂無章​​,因爲每個事件只有一個觀察者,協議和模塊都是主題和觀察者 - 協議將觀察通信,模塊將觀察協議,例如模塊將使用協議和使用通信的協議(即,它是雙向的)。所以我不認爲設計模式符合要求。 – Moose

回答

1

很可能你沒有進行同步通信,所以你不能等到通信層找到答案。

所以我們有什麼是應用程序 - >模塊 - >協議 - >通信。這一切都用於傳輸方面(除了來自各層的任何重試等)之外。

您不說數據是如何實際收集的,有可能是通信層不會知道任何數據,除非您將其告知爲消息/事件系統在應用程序中。因此,無論如何您都需要調用它,並且應用程序瞭解模塊和所有通信層似乎都是錯誤的。

因此,將收集的數據傳遞給模塊,讓它們沿着鏈傳遞,如果數據有意義,它最終會到達頂層。應用程序應該「訂閱」來自模塊的事件以獲取所需的數據(事件和觀察者)。在通信層之間不需要訂閱,因爲你會叫他們給他們工作,所以他們可以簡單地返回處理結果。

+0

感謝您的回答。看起來你是唯一真正理解我寫的東西的人:) – Moose