ruby-on-rails - 为什么将实例变量用于带有 View 的 "connect" Controller ?

标签 ruby-on-rails instance-variables conceptual

这是一个概念性问题,我无法在 SO 中找到答案,所以我开始了:

为什么使用实例变量来连接 Controller 和 View ?我们不是有两个不同类的两个不同对象( Controller 与 View )。那么,当 View 被渲染时,我们处于不同的上下文中,但我们正在使用另一个对象的实例变量?这不是以某种方式打破封装吗?

Rails 如何做到从一个对象到另一个对象的匹配?它是否将 Controller 的所有实例变量克隆到 View ?

最佳答案

从某种意义上说,你可以说它打破了封装。我发现,如果您不小心,很容易在 Rails 中将您的业务/表示逻辑混在一起。它通常在我编写 View 模板时开始,并发现我需要一些我没有从 Controller 传递的值。所以我回去,调整 Controller 以适应我在 View 中的需要。经过一次又一次的调整后,您查看 Controller 方法,它正在设置各种没有意义的实例变量,除非您查看 View 以了解它们的用途。因此,您最终会遇到一种情况,您需要同时查看 Controller 和 View 才能理解其中之一,而不是孤立地看待其中一个。

我认为使用实例变量(连同 Binding 技巧)只是一种将您需要的任何值从 Controller 传递到 View 的方法,而无需提前声明参数(就像定义方法时那样)。没有声明意味着要编写的代码更少,并且在您想要重构和重新组织事物时需要更改的更少。

关于ruby-on-rails - 为什么将实例变量用于带有 View 的 "connect" Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9384649/

相关文章:

python - 为什么Python允许在初始化后添加实例变量?

objective-c - 我没有设置的 BOOL 属性的值是多少?

objective-c - 通过 "self."访问属性是否比直接访问 ivar 慢?

algorithm - 找到任意两个函数的交集 - 求解联立方程

r - 在 R 中处理 "less than"

sql - 查找具有两列唯一组合的所有行

ruby-on-rails - 有点难看——不存在的哈希键的默认值?

c# - 具有属性和方法的内存类生成

ruby-on-rails - 使用 rspec 在 Rails 3.2 中测试 JSON API,使用 Backbone 将发送的精确 PUT/POST 主体

ruby-on-rails - 预编译时的 Sass undefined variable