2011-11-10 93 views
3

我正在開發分佈式應用程序(服務器和客戶端)。服務器發送了一些指令(例如,InitCommand,StartCommandStopCommand)。每個命令都有自己的論點。現在,如果要進入序列化和網絡,我在問自己是否應該爲每個命令類型(從Command繼承)創建一個子類,或者將所有可能的參數放在Command類中。子類或綜合類

當處理一個命令是VS if (command is InitCommand)if (command.Type == CommandType.Init)

我的第一個實現使用第一個選項。我正在手動序列化並在開始處輸入類型信息。現在,如果我從網絡接收數據(byte[]),我首先檢查實際類型(反序列化前k個字節),然後使用一些反序列化方法(例如,Serializer.Deserialize<InitCommand>)。

第二個選擇似乎更容易使用,因爲我可以使用自動序列,不需要反序列化之前檢查的類型。但這讓我很煩惱,我必須把所有的論點都放在一個班級裏。

你認爲哪個更好,或者你瞭解其他方法?

回答

1

聽起來你應該有一個類與多種方法; StartInitStop。這將支持一個班的所有內容。 SqlCommand的CommandType爲TextStoredProcedureTableDirect,這聽起來像你正在嘗試重建一個不同類型的命令。我會選擇#2,並看看微軟如何執行SqlCommandCommandType