最近我有一个项目,我必须从特定的软件系统获取一些数据到portlet。该软件使用了一个数据库,我花了相当多的时间来建模我想要的数据,然后创建一个Web服务,以便我的portlet可以获取信息。
然后我突然想到我在浪费时间。我抓住了BIRT,将它扔进了一个portlet,然后只写了一些直接从数据库中获取必要数据的报告。我是在一个下午完成的。
我知道报道是一条单行道,但这让我思考。报告工具可以非常有效地从您的实际数据创建报告(duh),但是当您这样做时,您将绕过您的模型,除非在简单的情况下不是数据库中存在的数据的直接表示。
如果您正在编写数据密集型应用程序并且需要能够执行重要报告,那么您是否绕过了应用程序并使用BIRT或Crystal Reports之类的东西?作为整个流程的一部分,您如何管理这些工具?您是否认为您撰写的报告是您申请的一部分并将其视为您的申请?报告是一个视图,一个模型和一个控制器(如果你愿意的话)都在一个大混乱中,你如何处理,解释和计划呢?
修订问题:报告将执行一些业务计算是可能的,甚至是常见的,这些计算在您希望在应用程序中包含的完美世界中。这可能导致返回给用户的信息不匹配。另一方面,报告工具使得收集和显示信息变得如此容易,以至于很难采用纯粹主义者的方法并在应用程序内完成所有工作。是否有任何好的技术可以确保报告中的数据与您在常规GUI中显示的数据相匹配?
答案 0 :(得分:4)
我认为报告只是数据的另一个视图,而不是一个视图/模型/控制器(好吧,可能是一个视图和控制器)。
我们的报告(内置在sql 2008报告服务中)在我们的应用程序层中使用服务来获取数据(符合我们的标准,数据访问在存储库中)。这些函数可以执行简单的查询或处理非常复杂的处理,这将是您的报告环境或存储过程中的噩梦。实际上,我们发现这不仅仅是编写一些一次性存储过程,随着系统的增长和发展,它将成为维护的噩梦。
将报告简单地视为一次性或不整合到您的应用程序设计中是一个巨大的错误。
答案 1 :(得分:2)
报告至关重要。报告对于将在一个系统中收集的值与外部用户共享至关重要,例如,用户不直接使用系统(例如销售数据的管理)。因此,报告不仅仅是显示事实和数据,而且几乎是每个驱动广告的系统的核心。
至少更先进的系统允许您增强它们:使用您自己的可重复使用的“控件”。即使回来也可以实现 - 如果你只是使用正确的插件。一旦我写了一个系统来发送报告中的电子邮件,因为系统不允许更改。它起作用 - 虽然它并不意味着以这种方式使用;)
报告是应用程序的重要组成部分,如果您为客户提供可更改的报告,您将获得很大的自由。有时你提出的可能性比你在第一时间构建系统时想到的更多。
是的,对我来说,报告是系统的一部分。
答案 2 :(得分:1)
报告是您应用的一部分,但是因为它们通常是用户比您的数据捕获用户界面有强烈想法的东西,为了方便/交付速度而牺牲纯度并回到“真实”编码......: - )
一旦你完成了一个报告,用户就想要另一个报告或更改颜色或可选分组或更多过滤或......让你远离眩目的东西...所以我不会破坏肠道保持纯洁。
答案 3 :(得分:1)
这确实很好。您不希望花费太多时间来构建报告(用户希望您始终更改)但您不希望通过将业务逻辑放入报告来复制逻辑!通过我们在Data Dynamimcs的报告产品,我认为我们已经在这两个权衡之间达成了一个愉快的媒介。
通过使用ObjectDataProvider(请参阅下面的链接以获取更多信息),您可以将报表直接绑定到业务对象(普通旧对象),这样您就不必绕过业务层来获取数据。同时,我们提供了一种方法来引用和使用报表中其他库的功能。这样,如果您已经配置了一些代码来执行某些业务逻辑计算,则可以直接在报表中重用这些函数。您也可以在下面的链接中看到这样的示例。
Scott Willeke
Data Dynamics / GrapeCity
答案 4 :(得分:1)
我一直使用报告的方式是将部分报告视为代码库的一部分,并与应用程序一起存储在源代码中。在某些情况下,报告比应用程序更重要,因为管理层会根据报告数据做出业务决策,错误的信息会导致他们取消产品线,取消活动或解雇销售人员。显然,这在很大程度上取决于您的管理和应用程序。
关于保持模型的一致性,这是一个棘手的问题。确保报表与应用程序之间一致模型的一种方法是使用存储过程(或视图)来检索数据,具体取决于应用程序的体系结构。