2014-04-01 77 views
3

我是設計模式的新手。即使研究很多,我也無法理解我應該在什麼時候使用哪種設計模式。我的問題是:在Web應用程序上下文中,我應該使用哪種設計模式來實現像下面這樣的報告生成器?我應該爲動態報告生成器使用哪種設計模式?

============================================= ==========
報告類型:                   | '選擇列表' |
報告亞型:       | 另一個選擇'列表' |

過濾器:                                &NBSP | 許多選擇,許多過濾參數 | ================================================ =======

報告類型和子類型允許用戶生成多種報表,從另外一個不同,但過濾器是相同的所有(但不是所有的過濾器值將被使用或對所有報告有效)。我正在使用C#。我看了另外一個關於選擇設計模式的問題,但沒有成功。我應該使用哪種設計模式? 預先感謝人們:D。 (注:我問這個問題爲研究目的)

+0

爲什麼你認爲這可以通過設計模式解決?您不知道自己需要什麼,就像流行詞一樣使用它。 – RvdK

+0

正試圖編寫一個Web或桌面應用程序? –

+0

我正在學習設計模式,並試圖在我的真實世界中應用它們。我不想解決任何問題,只是明白。 –

回答

4

我同意這裏的所有評論,設計模式本身不是目標,他們是工具。你的助教/助理通過使得看起來像一個給定的任務需要一個給定的設計模式,將錯誤的想法放在你的頭上。

除了...

實現自己Factory。您的工廠將生成可用的IReports列表,並可能返回有關它們的一些元數據。

public class ReportData{ 
} 

public class ReportResult{ 
} 

public class ReportOptions{ 
} 

public class ReportSubtype{ 
} 

public interface IReport{ 
    string Name{get;} 
    string[] ReportSubtype{get;} 
    string[] ReportOptions {get;} 

    ReportResult GetReport(ReportData data, ReportSubtype subtype, ReportOptions options); 
} 

public class ReportSample: IReport{ 
    //.... your implementation 
} 

public static class ReportFactory{ 

    private IReport[] _reports = null; // cache the instances - optional 

    public static IReport[] GetAvailableReports(){ 
    if (_reports==null) // static definition can be replaced with dynamic loading 
     _reports = new IReport[]{ 
        new ReportSample(), 
        }; 

    return _reports; 
    } 
} 
+0

I部分不同意。當你學習時,用設計模式進行「實驗」是很好的,因爲它們不是微不足道的。參見http://books.google.ca/books?id=GGpXN9SMELMC&lpg=PA597&ots=IpJ7KNN6HY&dq=design%20pattern%20zen&pg=PA597#v=onepage&q=design%20pattern%20zen&f=false另一方面,Stackoverflow並不是真的提供有關初學者設計模式實驗的問題的好地方。 – Fuhrmanator

5

設計模式是不打算爲您挑選一個使用的應用程序。設計模式是有用的工具,可以幫助您構建組成應用程序的組件。最好的方法是開始開發你的應用程序,無論你發現你的代碼變得尷尬或難以理解,看看你已經瞭解了模式,看看是否有一些想法可以幫助你改進代碼。隨着您獲得經驗,您會發現自然使用模式以避免代碼問題。

+0

我喜歡這種觀點:D,這將幫助我 –

相關問題