2011-01-20 76 views
1

VB.NET,VS 2010,.NET 4VB.NET初學者設計的問題

你好,

我寫的應用程序。我發現它充滿了循環引用。我想重寫部分代碼來改進其設計。我已閱讀了分層編程,並希望爲我的應用程序實現類似的內容。

背景:我的應用程序是一個工業機器的控制程序。它解析包含各種連接設備的時間信息和設定值的配方(來自Excel文件)。有三種主要類型的設備:大多數通過Beckhoff終端連接,並通過TwinCAT(Beckhoff的僞PLC軟件)進行通信,另外兩個是RS-232設備,每個設備都有不同的通信協議。我可以通過Beckhoff提供的.NET API與Beckhoff設備進行通信。我已經爲兩個RS-232設備編寫了解析器類。一些Beckhoff設備是輸入,一些是輸出;有些是數字的,有些是(僞)模擬的。

我認爲我的問題是我在編寫應用程序時試圖繞過OOP,所以我創建了一些無法清晰瞭解其層次結構的類。在某些時候,我嘗試做我認爲正確的事情,例如,製作一個由「TwinCatDevice」類和「Rs232Device」類繼承的「Device」類。但後來我把所有的通信代碼都塞進了這些類中。

我現在正在嘗試創建一些通信模塊(例如,UtilTwinCat,UtilRs232),其中包含諸如「連接」,「斷開」,「讀取」,「寫入」等抽象方法。然後我試圖重寫我的「設備」類和子類以使用這些模塊,以便它們不必包含任何(有時是冗餘的)通信代碼。

這是我的問題:爲每種通信類型創建單獨的類是否會是一個好設計?即我應該說「TwinCatReadOnlyDigital」,「TwinCatReadOnlyAnalog」,「TwinCatWriteOnlyDigital」,「TwinCatWriteOnlyAnalog」,「TwinCatReadWriteDigital」,「TwinCatReadWriteAnalog」,「Rs232ReadOnlyDigital」等?或者也許有些接口像IReadOnly,IWriteOnly,IDuplex?

這看起來似乎不可能是正確的方法,因爲我認爲一個善於編程的人不會因爲每一個可能的事件而結束十億個不同的類。有什麼方法可以在運行時有選擇地在類上實現一個接口?我認爲這是一個愚蠢的問題......我仍然試圖圍繞爲什麼會使用一個接口。我正在尋找一些關於如何解決這類設計問題的基本見解。具體來說,如果你有很多不同的「事物」,是否是創建大量不同的類的最佳方法?

非常感謝提前, 布賴恩

編輯:我只是想補充一點,要明確,有設備,其參數是已知的有限數量的,所以這將是簡單的寫所有的班級我需要的類型。我只是想知道是否有更好的方法。

回答

1

這對於任何具體的答案來說都不夠真實,但讓我提出一些建議。

「我仍然試圖圍繞爲什麼會使用一個接口。

主要是因爲你可以「編程到接口」,那就是你不需要關心你是否在使用Beckhoff或RS-232設備 - 你只關心你可以發送數據給它。只是要說清楚:接口不包含包含的實現。實現接口的類承諾提供接口函數的具體實現。

  • 而不是IReadOnly,IWriteOnly和IDuplex使用兩個接口:IWriteable和IReadable(或任何名稱有意義)。雙工類將實現這兩​​個接口。
  • 策略或更可能是模板方法模式可能會幫助您稍微不同的類。也許甚至是簡單的子類化,但請記住,通常有一個更簡單,更好的解決方案。
  • 不要重複自己(DRY):嘗試爲每個邏輯塊找到一個且只有一個地方。
  • 幾個類共享的功能應該駐留在超類或實用程序類中。

而且,更具體的問題會導致更具體的答案:)

+0

感謝您的觀點。我覺得我正在接近理解整個界面的想法。我有希望;三個月前,我對類的整個想法也同樣感到困惑:x。我知道這個問題含糊不清,但我向你保證,這是我絕望的無知頭腦的準確反映。我會到達那裏! – 2011-01-21 01:50:49