2013-04-07 53 views
-3

每當使用設置嚮導時,用戶都會回答很多不同的事情,直到真正的安裝啓動。將其與當前項目中的類進行比較:我有一個需要多個配置步驟的類。它不適用於安裝程序,但我認爲安裝程序嚮導是解釋所需更大配置功能的好方法。 我想找到一個好的設計解決方案。其中'設計模式'適用於具有複雜(多步)配置的類

我目前的解決方案處理辦法:

  1. 平:我可以定義與列爲方法/功能/性能的所有步驟,一個大班。在調用錯誤的方法時,可以添加幾個控制方法來拋出異常。它會做它的工作,但程序員會看到這麼多不同的方法會感到困惑。 ( - >他需要更多時間來了解它是如何工作的)

  2. 層次結構:我可以爲每個配置步驟創建約3個不同的類。每個人都有自己的方法和功能。最後,一個類需要在其構造函數中包含所有3個配置類的實例。這看起來不會太混亂,因爲只有正確的方法在每個類中都可見。然而,程序員可能會感到煩惱,一個小班需要如此複雜的準備工作,並創建3個其他班級。也許是嵌套類,但我認爲這也是一種糟糕的編碼風格。

我不知道是否有人已經有這樣的問題出現,可以通過回答這個..要麼提供一個合適的設計模式,或者這樣的問題的一些經驗/最佳實踐類結構。

我已經搜索了類似的問題,檢查了一些可能適合的設計模式,並且已經提供了2個方法思路來展示答案可以沿着什麼方向發展。如果您認爲答案不夠清楚,請評論/詢問有關缺失的部分。

+0

問題是有可能涉及,根據您的具體要求是什麼設計模式的無限可能,確切的領域,我們不知道他們。你應該找到一個項目,在那裏有一個嚮導閱讀源代碼。它們通常涉及某種狀態模式。 – mpm 2013-04-07 15:55:22

+1

如果一個類有很多事情要做,這表明已經有一些設計缺陷。你能詳細解釋一下這個複雜的引導過程嗎?因爲如果已經存在一些問題分離的問題,那麼您可能會發現沒有金錘可以將其轉化爲良好的設計。 – 2013-04-07 16:00:59

+0

@mpm感謝您的解釋。我正在使用VB.Net/C#,而不是嚮導的功能,一個類應該很容易使用,但是這個類需要多個配置步驟。使用狀態模式,我可以爲相同的方法調用更改操作,但如果方法在每個步驟中更改,那麼我想我不能使用它。我在當前項目中定義了多個枚舉,然後選擇從數據庫訪問哪一個枚舉。方法應該提供結果字符串列表(索引相關)。在此之後,'配置'完成,並且該類應該充當索引查​​找表 – Amegon 2013-04-07 16:07:31

回答

0

從問題和評論中所解釋的問題來看,「單一類統治他們」的方法似乎並不是一個好的選擇。

也許某種策略模式是這裏要走的路。

根據您的要求,您可以從不同的策略中進行選擇,而不是對單一課程進行非常複雜的設置。如果您已經知道 將會發生三種不同的事情,請制定三種不同的策略。

舉個例子: 你想寫日誌數據。也許對文件,數據庫或web服務。

那麼你只有一個依賴於具有 明確定義的接口「LogWritting戰略」,可以說

interface ILogWriter 
{ 
    void Write(enum LogLevel, string logEntry); 
} 

現在,在您的客戶端代碼,您取決於該接口上,只是撥打電話在界面上。但在運行時,您根據「配置」「注入」具體策略。

I.e.你只需選擇合適的策略,並且你沒有複雜的單個類的引導。

然後你用具體的戰略就像

IDatabaseLogWriter 
IFileLogWriter 
IWebServiceLogWriter 

大約是可以在這裏找到什麼樣的策略的簡要說明:從最近的評論,我認爲 Strategy pattern

更新

存儲庫和映射模式都可以提供幫助。

你應該考慮尋找

Repository pattern, good explanation

Repository explanation by Martin Fowler (top notch architecture)

Metadata mapping

+0

存儲庫外觀有趣。包含dataMapping的Controller類。但問題是,在我的情況下,這種額外的數據訪問層已經存在。它的配置(數據映射器用數字表示總是相同的字段)並不那麼簡單,很難擴展。所以我正在尋找一種模式來使數據映射器的配置更加簡單。現在,添加字段需要我在映射器內的三個不同位置更改代碼。因此,我想要一個關注配置的類,並且類本身應該是「容易」更改的。 – Amegon 2013-04-07 19:54:32

+0

也許你想看看http://martinfowler.com/eaaCatalog/dataMapper.html和http://en.wikipedia.org/wiki/Data_mapper_pattern代碼示例包含在第二個鏈接 – 2013-04-07 21:05:25

+0

感謝您的建議,我檢查回答,因爲你是對的,一個結構良好的數據映射器不應該有這樣的配置問題。但是,我正在使用工廠和生成器模式的混合。 – Amegon 2013-04-08 12:31:05