C# 动态报表生成器应该使用哪种设计模式?

C# 动态报表生成器应该使用哪种设计模式?,c#,design-patterns,C#,Design Patterns,我是设计模式的新手。即使做了很多研究,我也无法理解什么时候应该使用哪种设计模式。我的问题是:在web应用程序上下文中,应该使用哪种设计模式来实现下面这样的报表生成器 ======================================================= 报告类型:|此处为“选择列表”| 报告子类型:|另选择“列表”| 过滤器:许多选择,许多过滤参数| ======================================================= 报告

我是设计模式的新手。即使做了很多研究,我也无法理解什么时候应该使用哪种设计模式。我的问题是:在web应用程序上下文中,应该使用哪种设计模式来实现下面这样的报表生成器

======================================================= 报告类型:|此处为“选择列表”| 报告子类型:|另选择“列表”| 过滤器:许多选择,许多过滤参数| =======================================================

报告类型和子类型允许用户生成多种不同的报告,但过滤器对所有报告都是相同的,但并非所有过滤器值都将对所有报告使用或有效。我正在使用C语言。我已经研究了关于选择设计模式的另一个问题,但没有成功。我应该使用哪种设计模式? 提前谢谢各位:D。 注:我问这个问题是为了学习

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

我同意这里的所有评论,即设计模式本身不是目标,而是工具。你的助教/教授把错误的想法放在你的头脑里,让它看起来好像一项给定的任务需要一个给定的设计模式

除此之外

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

为什么你认为这可以通过设计模式来解决?你在不知道自己需要它做什么的情况下像一个时髦词一样使用它。你在尝试编写web或桌面应用程序吗?我正在研究设计模式,并试图将它们应用到我的实际应用程序中。我不是想解决任何问题,只是想了解。这是一个web应用程序,另一个选择是使用现有的报告软件。e、 g.如果您使用的是SQL Server,它提供Reporting Services SSR。SSRS有一个web控件,您可以将它放在web表单上,这使得从数据库进行报告变得很容易。然而,它确实将你束缚在一个你可能不想要的特定解决方案中……我部分不同意。在学习时尝试设计模式是很好的,因为它们并不琐碎。另一方面,Stackoverflow并不是一个询问设计模式初学者实验问题的好地方。