【问题标题】:Implementing a factory that can have different parameter combinations实现可以具有不同参数组合的工厂
【发布时间】:2014-04-13 16:52:55
【问题描述】:

我正在尝试实现一个生成报告的工厂方法。

为此,我创建了一个名为 IReport 的接口、一个详细说明可用的不同报告的 ReportType 枚举和一个 ReportFactory 类。

这个想法是,根据报告的类型,您可以调用将返回 IReport 对象的 GenerateReport 方法:

IReport GenerateReport(ReportType reportType);

但是,不同的报表需要不同的参数。

  • 有些报告只需要一个开始日期和一个结束日期。
  • 详细说明特定订单的报告需要订单 ID
  • 另一个报告需要客户 ID 和订单 ID
  • 还有一些

问题:

我是否必须为每种报告类型创建不同的 GenerateReport 方法?

创建一个名为 ReportParameters 的类,它包含所有可能的参数并且工厂方法知道要根据报告类型使用哪些参数,这是不是一个坏主意?

例如

class ReportParameters
{
ReportType RepType;
DateTime StartDate;
DateTime EndDate;
int CustomerID;
int OrderID;
}

然后使用

IReport GenerateReport(ReportParameters params);

非常感谢任何cmets

【问题讨论】:

    标签: c# factory


    【解决方案1】:

    你说:

    创建一个名为 ReportParameters 的类是不是一个坏主意 所有可能的参数和工厂方法知道哪些参数 根据报告类型使用?

    我不这么认为。对我来说,这听起来像是一种工厂。我对此有两个想法:

    1. 您可以为您的不同报告提供此 ReportParameters 的子类,这些子类可以提供帮助工厂确定如何创建此类报告的方法
    2. 工厂并不是创造东西的唯一手段。你也可以调查builders

    Builder 设计模式的目的是将 从它的表示构造一个复杂的对象。通过这样做, 相同的构造过程可以创建不同的表示。

    【讨论】:

      猜你喜欢
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多