代码之家  ›  专栏  ›  技术社区  ›  Eduardo Cobuci

我应该从MVC应用程序中的视图迭代业务对象吗?

  •  0
  • Eduardo Cobuci  · 技术社区  · 16 年前

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

    PS:我在使用Ruby on Rails和ActiveRecord。

    2 回复  |  直到 16 年前
        1
  •  2
  •   AnthonyWJones    16 年前

    假设艺术家的模型类具有提供歌曲集合的方法,我认为没有理由要求控制器明确地将这两种方法传递给视图。

        2
  •  3
  •   Sarah Mei    16 年前

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

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

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

    编辑 根据方法的评论,从视图中提取数据有两个问题:

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