【问题标题】:Report handler architecture question报告处理程序架构问题
【发布时间】:2008-10-10 14:38:35
【问题描述】:

我正在尝试使用 ReportHandler 服务来处理报告创建。报告可以设置多个不同数量的参数。在系统中,目前有几种不同的创建报告的方法(MS 报告服务、html 报告等),并且为每个报告生成数据的方式是不同的。我正在尝试将所有内容整合到 ActiveReports 中。我无法更改系统和更改参数,因此在某些情况下,我将获得一个 where 子句来生成结果,而在另一种情况下,我将获得必须用于生成结果的键/值对。我考虑过使用工厂模式,但是由于查询过滤器的数量不同,这不起作用。

我希望有一个 ReportHandler 可以接受我的各种输入并输出报告。在这一点上,除了使用大的 switch 语句来处理基于 reportName 的每个报告之外,我没有看到任何其他方法。有什么建议可以让我更好地解决这个问题吗?

【问题讨论】:

    标签: c# asp.net report activereports


    【解决方案1】:

    根据您的描述,如果您正在寻找比 Factory 更匹配的模式,请尝试 Strategy:

    Strategy Pattern

    1. 您的 context 可以是封装和抽象不同报告输入的自定义类(您可以在这部分使用 AbstractFactory 模式)
    2. 您的策略可以实现任意数量的不同查询过滤器或所需的额外逻辑。如果您将来需要更改系统,只需创建新策略即可在报告工具之间切换。

    希望有帮助!

    【讨论】:

      【解决方案2】:

      除了策略模式之外,您还可以为每个底层解决方案创建一个适配器。然后使用策略来改变它们。我已经构建了类似的每个报表解决方案都由我称之为引擎的支持,除了可变报表解决方案之外,我们还有可变存储解决方案 - 输出可以存储在 SQL 服务器或文件系统中。 我建议使用容器,然后使用正确的引擎对其进行初始化,例如:

      public class ReportContainer{
                public ReportContainer ( IReportEngine reportEngine, IStorageEngine storage, IDeliveryEngine delivery...)
      }
      }
      
      /// In your service layer you resolve which engines to use
      // Either with a bunch of if statements / Factory / config ... 
      
      IReportEngine rptEngine = EngineFactory.GetEngine<IReportEngine>( pass in some values)
      
      IStorageEngine stgEngine = EngineFactory.GetEngine<IStorageEngien>(pass in some values)
      
      IDeliverEngine delEngine = EngineFactory.GetEngine<IDeliverEngine>(pass in some values)
      
      
      
      ReportContainer currentContext = new ReportContainer (rptEngine, stgEngine,delEngine);
      

      然后 ReportContainer 将工作委托给相关引擎...

      【讨论】:

        【解决方案3】:

        我们遇到了类似的问题,并采用了“连接器”的概念,它是主报表生成器应用程序和不同报表引擎之间的接口。通过这样做,我们能够创建一个“通用报表服务器”应用程序。您应该在 www.versareports.com 上查看。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多