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

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

但这似乎很糟糕 但控制器应该是轻量级的,不是吗? 业务逻辑不应该在视图中,因为我已经存在了。

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

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

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

===============>>#1 票数:3 已采纳

正如Brian所说,你可以创建另一个模型来整理需要做的工作。 关于如何做这类事情,有一个很棒的Railscast

HTH

===============>>#2 票数:1

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

===============>>#3 票数:1

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

===============>>#4 票数:0

控制器不必那么轻巧。

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

===============>>#5 票数:0

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

  ask by Mike Woodhouse translate from so

未解决问题?本站智能推荐: