【问题标题】:Ok to instantiate an object in the View?可以在视图中实例化一个对象吗?
【发布时间】:2009-05-27 06:36:36
【问题描述】:

在将对象传递给局部之前,可以在视图中实例化对象吗?

<%= render :partial => "trade_new", :locals => {:trade=>Trade.new("e", "b") } %>

或者最好将Controller中的任何对象实例化为实例变量:

@trade = Trade.new("e", "b")

然后将实例变量传递给视图中的一个部分,如下所示:

<%= render :partial => "trade_new", :locals => {:trade => @trade } %>

我的猜测是最好在控制器中实例化新对象以避免重复 - 例如在多个模板可能需要将此新对象传递给同一操作的部分的情况下。

【问题讨论】:

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


    【解决方案1】:

    首先,可以在视图中实例化一个对象。什么都不会在你的脸上爆炸。但是,您会错过将架构分成多个层的全部优势。

    最好在控制器中实例化对象。一些原因包括 - 更好的重用,更简单的测试,更好的设计,因为解耦。

    请参阅有关演示模式的文章here

    【讨论】:

    • 是的,不会因为你在视图中实例化而发生任何不好的事情,但这通常不是一个好的设计:)
    • 我个人对此规则的一个例外是,如果我需要实例化一个空对象以传递给表单,或者获取一堆对象以显示一个选择框。我在 View(或后者的 Helper)中执行这两项操作,而不会流下一个 MVC 撕裂。
    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 2010-09-17
    • 2019-10-22
    • 2023-03-24
    • 2014-07-20
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多