我是设计模式的新手。即使研究很多,我也无法理解我应该何时使用哪种设计模式。我的问题是:在Web应用程序上下文中,我应该使用哪种设计模式来实现如下所示的报告生成器?
================================================== =====
报告类型: | '选择列表'这里 |
报告子类型: | 另一个选择'列表' |
过滤器: | 许多选择,许多过滤参数 |
================================================== =====
报告类型和子类型允许用户生成多种报告,一种不同,但过滤器对所有报告都是相同的(但并非所有过滤器值都将用于所有报告或对所有报告都有效)。我正在使用C#。我已经看过另一个关于选择设计模式的问题,但没有成功。我应该使用哪种设计模式? 在此先感谢大家:D。 (注意:我已经将这个问题用于研究目的)
答案 0 :(得分:6)
设计模式不是为了让您选择一个来用于应用程序。设计模式是有用的工具,可以帮助您构建组成应用程序的组件。最好的方法是开始开发您的应用程序,无论您发现代码变得笨拙或难以理解,请查看您对模式的了解,看看是否有一些有助于改善您的模式的想法码。随着您获得经验,您会发现自然地使用模式来避免代码问题。
答案 1 :(得分:4)
我同意这里的所有评论,即设计模式本身不是目标,它们是工具。您的TA / prof通过使某个特定任务需要给定的设计模式看起来错误的想法。
除此之外......
自己实施Factory。您的工厂将生成可用的IReport列表,并可能返回一些有关它们的元数据。
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;
}
}