3

我有一个使用 MVC 构建的应用程序,它生成一个视图,该视图提供跨多个模型的摘要信息。此外,一些计算是在不同的数据集上执行的。

没有明确的单一模型(至少映射到表)作为起点似乎是有意义的,因此从控制器中的贡献模型中提取各种摘要,传递到视图并在那里执行计算.

但这似乎很脏。但是控制器应该是轻量级的,不是吗?业务逻辑不应该出现在视图中,就像我现在所拥有的那样。

那么这些信息应该在哪里收集呢?一个不映射到表格的新模型?库函数/模块?或者是其他东西?

(虽然我认为这主要是一个架构/模式问题,但我在 Rails 工作,FWIW。)

编辑:全面的好答案,以及很多共识,这令人放心。我“接受”了我为将 Railscasts 的链接保留在顶部所做的回答。我在 Railscast 观看中落后了——我将努力纠正这一点!

4

5 回答 5

3

正如布赖恩所说,您可以创建另一个模型来整理需要完成的工作。关于如何做这种事情有一个很棒的 Railscast 。

高温高压

于 2008-08-25T21:53:18.987 回答
1

为什么不创建一个不继承ActiveRecord::Base并执行那里的逻辑的模型(想想敏捷中的 Cart 类...With Rails)。

于 2008-08-25T20:46:38.337 回答
1

控制器不必映射到特定的模型或视图。您的模型不必一对一地映射到数据库表。这就是框架的想法。分离所有可以单独测试的关注点。

于 2008-08-26T01:52:25.840 回答
0

控制器不必那么轻量级。

但是,如果您有一些仅依赖于模型的计算,那么您可能只需要某种模型包装器来让模型执行计算。然后,您可以将其放入视图的 API 中,以便视图获得最终结果。

于 2008-08-25T20:46:13.033 回答
0

您不希望逻辑出现在视图中。但是,您可以自由创建数据库视图。除了在数据库端创建它,而是将其创建为一个新模型。这将使您能够在一个地方执行计算和实际逻辑。试图使您的观点保持同步的痛苦与创建新模型的一次性“痛苦”......我投票支持新模型。

于 2008-08-26T01:26:04.013 回答