2011-01-21 63 views
2

我想在C#Winforms中繞開OOP,但我對某件事感到好奇。蘋果或水果的C#類?

可以說我正在使用TCP協議進行聊天系統。我需要至少以下內容: - 一個TcpListener; - 一個TcpClient; - 解析/處理數據包的東西; - 數據包加密系統。

我的問題是,讓我的班叫:

  • 服務器;
  • 客戶端;
  • 加密;
  • PacketHandler。

或者我做2個類叫: - SendReceive; (服務器和客戶端) - PacketControl。 (數據包處理器和加密類)

或者我只是把它全錯了?

是否有任何標準來選擇你放在哪個班級?也歡迎鏈接。

謝謝你的時間。

+0

你不應該在classnames結尾有Class這個詞。 – 2011-01-21 08:20:23

+0

@Jannis在這裏,我想,我可以避免這個評論,只是爲了澄清他們的工作。我想我應該添加「和他們是什麼」。 – Nick 2011-01-21 08:21:55

+0

您正在考慮實施細節,同時您正在考慮優秀的設計。改變你對「設計」一個系統的想法,而不是「建立」一個系統。 – CodingBarfield 2011-01-21 08:23:32

回答

4

你可能想看看the solid principles或這篇文章來找到一些設計指南。首先,你應該要求「責任」,然後嘗試將它們分配給課程。嘗試寫測試,你會發現較小的單位(單一責任)更容易測試。如果你需要一個處理不同事物的單位,那麼它可能由其他人組成(這是較小單位之間的主持人)。

0

我會從一個可以監聽端口或連接到一個IP地址/端口的Connection類開始。將所需的任何代碼添加到該類中以使其工作。

接下來,我會創建兩個單獨的類服務器和客戶端。 (可能是兩個獨立的項目)。這些會設置你需要的任何代碼來進行通信並從Connection類中接收事件。

在此之後,我會爲Connection類添加一些ecryption,可以通過用EncryptedConnection類包裝它或將ConnectionClass擴展到子類中。

0

首先,我反對談論「在C#Winforms中的OOP」。不管語言如何,OOP都是OOP。

至於在哪裏畫班級之間的界限,請儘量讓每個班級只承擔一項責任。我肯定會有一個單獨的加密類。我不確定你打算使用ServerClass和pHandlerClass來做什麼,但是如果它只是從輸入流中提取數據,調用解密類並將它發送給某個業務類來呈現給GUI,那聽起來好像它可能是在一個班級。一個「處理器級」。

0

首先,您可以通過不使用Class中的單詞來縮短班級名稱,這有助於使事情更加清晰。

我教過的一種方法是命名系統中的所有東西,並嘗試命名只有單一責任的對象 - 如Server,Client,Packet,EncryptionScheme ...混合責任是很容易讓事情混淆的好方法,單責任對象更容易測試。

0

SOLID是應該在軟件開發過程中引導您的核心原則(如果您想創建可維護和可擴展的產品)。

首先「氣味」告訴你有什麼不對勁 - 複製。例如。如果你將重複發送和接收客戶端和服務器類的邏輯。所以,正確的方法是將該邏輯提取到單獨的類/類中。 接下來的'氣味' - 複雜性。如果你很難理解你的代碼的一部分 - 你應該考慮如何簡化它(例如,提取子類的類,提取方法或甚至重命名變量)。

當你決定課程的責任時,儘量避免使用單詞'AND',因爲它很可能是一種破壞性的'氣味'(單一職責原則)。例如。這個類用於發送包並加密它們。順便說一句,有很酷的東西叫'crc卡',這可能會幫助你做好課堂設計。

但你總是應該想 - 你真的需要所有的東西(YAGNI - 你是不是要去需要它) - 你需要很酷的維護和擴展,如果你正在爲你的奶奶和爺爺寫的聊天。

關於你的情況 - 在理想的世界中我可能會做這樣的事情:

客戶端,服務器,頻道(聊天頻道抽象,可能是的TcpChannel,MSMQChannel等),也可能SecureChannel - 簡單裝飾過基本通道功能