請不要評論這裏使用的壞習慣。我只是試圖用易於描述的例子來解決這個場景的抽象問題。抽象挑戰。如何實現這一目的的封裝
我想模擬一個系統,它允許用戶輸入一個名爲TASK的實體與特定的配置參數,然後讓TASK執行特定於該任務的操作。
的任務定義一些例子可以是:
*創建目錄{PATH}文件{文件名}。
*將{源目錄}中的文件{文件名}複製到{目標目錄}。
*打開{記事本應用程序},輸入文本{示例文本}並將文件保存爲{文件名}。
*打開{sample.docx},在第二段末尾鍵入文本{sample text}。
每個任務都有一個描述性名稱和最多5個參數。在上面的例子中,參數用大括號{}括起來。用戶將被指示繼續上述任務,我們的應用程序將驗證它們是否已完成。每個任務必須具備以下功能:
在靜態的世界裏,我將創建下列類:
public abstract class TaskBase { public abstract void Perform(param1, ... param5); }
public class TaskFileCopy: TaskBase { public override void Perform(param1, ... param5) {} }
的問題是,任務可能是幾乎任何東西和程序後,編譯和部署,需要添加更多的任務。首先想到的就是繼續從TaskBase派生出來,實現Perform,重新編譯和重新部署,同時保持以前的任務結果的完整。
這裏有兩個問題:當我們碰到2000個任務時,我們將有至多2,000個派生類,其次,底層的OODB將陷入困境。
我一直在想System.AddIn,但我確信這種情況在OOP設計中有更好的解決方案。
嗯...現在我堅持繼承,直到任務數量增加。除了你的建議,我還考慮存儲代碼或編譯模塊,並使用反射來在運行時執行它們。我需要更好地理解MEF。複合模式可能是一個候選人,但是這讓我有點害怕,知道這些任務可能有多種多樣。 – 2012-04-06 03:59:14