[英]Is my design for UDP socket server correct?
我正在設計一個使用MFC進行UDP通信的服務器。 我有以下課程
我正在將CConnectionManager的對象創建為CController中的成員變量,並將CController的對象創建為CMyDialog中的成員變量。
當用戶鍵入內容並按send時,我正在CControler中調用一個方法,該方法將在CProtocolManager中調用一個方法來構造數據包,並調用CConnectionManager方法來發送它。
當我收到一些數據時,它將在CConnectionManager的線程中處理。 我在這里創建一個CController的本地對象並調用一個方法,該方法會將數據傳遞給CProtocolManager進行解碼。
現在,我想通知UI有關數據,CControler應該如何做? 我可以通過使主對話框句柄變為全局來向UI發布消息,這是一種正確的方法。
還告訴我這種設計是否正確。
提前致謝
看來您是在單個線程中完成所有操作。 由於數據包來回往返需要時間,因此建議在其他線程中完成耗時的工作,並發布狀態/結果UI線程。 (否則,UI將被凍結)。
我認為設計永遠不會是非對非,但是您可以根據許多人認為是“好”的一些原則(請參見SOLID原則 ) 對它們進行評級 。
您的發送方法聽起來很合理,但是將Dialog全局設置為接收狀態絕對被認為“不太好”。 參見好萊塢原則 。 我建議您最好將回調方法傳遞給連接管理器,該方法是CController的方法(然后讓CProtocolManager對其進行解碼並從對話框中調用另一個回調方法)。 如果回調不是您想要的,則可以使用方法定義類似於“ AbstractMessageReceiver”的AbstractBaseClasses(ABC)
virtual void receive(const char*, int length) = 0;
然后,您可以在CProtocolManager中實現此ABC,將其作為“ AbstractMessageReceiver *”傳遞給CConnectionManager,然后調用
m_myMessageReceiver->receive(m_buffer, m_length);
或類似的東西。
這種方法減少了耦合,更具可測試性,並增加了可重用性。
此外,我同意Am,您應該考慮自己的線程模型!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.