【问题标题】:Object oriented logic with different types for a report具有不同类型的报表的面向对象逻辑
【发布时间】:2015-01-29 21:35:00
【问题描述】:

我想用面向对象的设计模式创建报表机制。我想创建一个报告生成器。 报告可以是 PDF、Wrod、HTML。所以我创建了一个这样的界面:

interface IReportGenerator{
    Report Generate();
}

class PDFReportGenerator : IReportGenerator{
    public Report Generate(){
        retrun ******;
    }
}

但是我有很多类型的报告。 FeaturedProductsReport、MostActiveCustomersReport、BestSellerReport等

每种类型的报告都有不同的参数。所以我可以聚合它们。我该如何做面向对象的设计这些逻辑?

【问题讨论】:

  • 听起来你需要分离关注点。报告的 CONTENT 和呈现它的 FORMAT 之间存在差异,因此您可能需要两个接口 - IAmAReportDefinition 和 IAmAFormatDefinition
  • 只需使用Dictionary <string,string> 并存储参数名称和值。或者,如果您需要更复杂的东西,请创建一个自定义类并使用 Dictionary <string, object>

标签: java c# oop design-patterns interface


【解决方案1】:

要实现这一点,您确实需要使用 2 个接口。

特别是你有你的格式,这些是 word、pdf、html 等。

您还有一些类型的报告:这些是“最活跃的客户”“畅销书”等。

interface IReportFormat{
WriteReport(IReportType);
}

interface IReportType{
string Name{get;}
string GenerateReport();
}

您也可以让“GenerateReport”采用 IReportFormat 并反转依赖关系。

在上面的 WriteReport 中,您需要获取生成的字符串,然后应用格式特定的格式。我对输出格式不够熟悉,无法知道它们之间有什么不同,但可以想象,您可以通过读取 IReportFormat 的特殊属性并一次应用所有转换的方式来实现 GenerateReport。

【讨论】:

    【解决方案2】:

    您可以使用抽象工厂设计模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2020-05-27
      • 2012-05-19
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      相关资源
      最近更新 更多