我有一个使用MVC构建的应用程序,它生成一个视图,可以在多个模型中提供摘要信息。除此之外,还会对不同的数据集执行一些计算。
没有明确的单一模型(至少映射到表格),这似乎是有意义的起点,因此各种摘要从控制器中的贡献模型中提取,传递到视图和计算中在那里进行。
但是,好吧,脏。但控制器应该是轻量级的,不是吗?并且业务逻辑不应该在视图中,因为我已经存在。
那么这些信息应该在哪里汇编?一个新模型,不映射到表格?库函数/模块?或其他什么?
(虽然我认为这主要是建筑/模式问题,但我在Rails,FWIW工作。)
编辑:全面的答案,以及很多共识,这是令人放心的。我“接受”了我为保持Railscasts链接在顶部所做的答案。我在Railscast观看中落后了 - 我将努力纠正这个问题!
答案 0 :(得分:3)
正如Brian所说,你可以创建另一个模型来整理需要做的工作。关于如何做这类事情有a great Railscast。
HTH
答案 1 :(得分:1)
为什么不创建一个不继承ActiveRecord::Base
并在那里执行逻辑的模型(想想Agile中的Cart类......使用Rails)。
答案 2 :(得分:1)
控制器不必映射到特定的模型或视图。您的模型不必一对一映射到数据库表。这就是框架的想法。分离可以单独测试的问题。
答案 3 :(得分:0)
控制器不一定 轻量级。
但是,如果你有一些只依赖于模型的计算,那么你可能只需要某种模型包装来为模型执行计算。然后,您可以将其放入视图的API中,以便视图获得最终结果。
答案 4 :(得分:0)
您不希望逻辑出现在视图中。但是,您可以自由创建数据库视图。除了在数据库端创建它之外,将其创建为新模型。这将使您能够在一个地方执行计算和实际逻辑。试图保持观点同步的痛苦与创建新模型的一次“痛苦”......我投票支持新模型。