我应该为动态报告生成器使用哪种设计模式

本文关键字:设计模式 动态 报告 我应该 | 更新日期: 2023-09-27 17:56:01

我是设计模式的新手。即使研究了很多,我也无法理解何时应该使用哪种设计模式。我的问题是:我应该使用哪种设计模式在 Web 应用程序上下文中实现如下所示的报告生成器?

=======================================================
报告类型:         |在此处选择列表 |
报表子类型:   |另一个选择"列表" |

过滤器:                多种选择,多种过滤参数 |=======================================================

报告类型和子类型允许用户生成多种类型的报告,其中一种与另一种不同,但筛选器对所有报表都是相同的(但并非所有筛选器值都将对所有报表使用或有效)。我正在使用 C#。我看过另一个关于选择设计模式的问题,但没有成功。我应该使用哪种设计模式?提前感谢人们:D。(注意:我问这个问题是为了学习目的)

我应该为动态报告生成器使用哪种设计模式

设计模式不适合您选择要用于应用程序的设计模式。 设计模式是有用的工具,可以帮助您构建构成应用程序的组件。 最好的方法是开始开发你的应用程序,无论你发现你的代码变得笨拙或难以理解,看看你学到的模式,看看是否有一些想法可以帮助改进你的代码。 随着经验的积累,您会发现您自然地使用模式来避免代码问题。

我同意这里的所有评论,即设计模式本身不是目标,而是一种工具。你的TA/Proff在你的脑海中提出了错误的想法,让它看起来像一个给定的任务需要给定的设计模式。

除此之外...

为自己实现一个工厂。您的工厂将生成可用 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;
  }
}