如何在MVC中表示跨模型信息?
时间:2020-03-05 18:43:00 来源:igfitidea点击:
我有一个使用MVC构建的应用程序,该应用程序生成一个视图,该视图可提供许多模型的摘要信息。除此之外,还要对不同的数据集执行一些计算。
没有明确的单一模型(至少映射到一个表)似乎是这样做的出发点,因此各种摘要都从控制器中的贡献模型中提取出来,传递到视图中并在此处执行计算。
但这似乎很肮脏。但是控制器应该是轻量级的,不是吗?而且,业务逻辑不应像我现在所看到的那样出现。
那么,这些信息应该在哪里收集呢?没有映射到表格的新模型吗?库功能/模块?或者是其他东西?
(尽管我认为这主要是建筑/模式问题,但我在FWIW的Rails中工作。)
编辑:全面的好答案,很多共识,这是令人放心的。我"接受"了我将链接到Railscasts的链接放在顶部的答案。我在Railscast中落后,我将竭尽全力纠正问题!
解决方案
回答
控制器不必如此轻巧。
但是,如果我们有一些仅依赖模型的计算,则可能只需要某种模型包装即可使模型执行计算。然后,我们可以将其放入视图的API中,以便视图获得最终结果。
回答
为什么不创建一个不继承ActiveRecord :: Base
的模型并在那里执行逻辑(想想Agile ... With Rails中的Cart类)。
回答
正如Brian所说,我们可以创建另一个模型来整理需要完成的工作。 Railscast上有一个很棒的关于如何做这类事情的文章。
高温超导
回答
我们不希望逻辑出现在视图中。但是,我们可以自由创建数据库视图。除了将其创建为新模型之外,而不是在数据库端创建它。这将使我们能够在一处执行计算和实际逻辑。试图保持视图同步与创建新模型的一次"痛苦"之苦……我投票支持一种新模型。
回答
控制器不必映射到特定的模型或者视图。模型不必一对一映射到数据库表。这就是框架的想法。分离关注点可以全部进行隔离测试。