【问题标题】:Should I iterate through business objects from Views in a MVC application?我应该从 MVC 应用程序的视图中迭代业务对象吗?
【发布时间】:2009-04-10 18:59:48
【问题描述】:

我想知道在使用 MVC 框架时我应该在视图中进行多少数据访问。 例如:在我的应用程序中,有一个页面显示了我最喜欢的所有艺术家的列表,以及每个艺术家的所有歌曲列表。 问题是:我应该只将艺术家列表传递给视图,还是应该同时传递所有数据(艺术家 + 歌曲)?

Ps:我正在使用 Ruby On Rails 和 ActiveRecord。

【问题讨论】:

    标签: ruby-on-rails ruby model-view-controller


    【解决方案1】:

    不要在视图中提取数据库数据 - 这是控制器的工作。在您的视图中,您应该只引用控制器方法加载的数据。

    在您的情况下,这意味着使用 :include 创建艺术家列表,以便预加载歌曲。

    # In your controller
    @artists = Artist.find(:all, :include => :songs)
    

    编辑针对方法的评论,从视图中提取数据存在两个问题:

    • 关注点分离。当我说你“应该”只在控制器中提取数据时,这就是我所说的——在 MVC 中,控制器处理数据访问,理论上,视图不包含逻辑。有时在视图中放入一些数据检索当然更容易,但它很快就会变得丑陋。
    • 效率,无论是查询数量还是查询结果大小,我认为这就是我们所说的方法。如果您在单个页面中加载了足够多的数据,这会成为一个问题,我想知道这是否不建议进行一些重构(或至少是分页)。

    【讨论】:

    • 这真的很重要吗?为什么不只是 ,特别是如果有条件逻辑意味着歌曲根本不会被请求。不过,我可能不理解所涉及的问题。我认为 AR 进行了延迟加载,并且检索更少的记录比更少的查询更有效。
    【解决方案2】:

    假设 Artist 的模型类可以提供一组歌曲,我认为没有理由要求控制器将两者都显式传递给视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 2011-05-21
      • 2022-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多