rails 风格指南里说控制器与视图之间共享不超过两个实例变量,主要是因为什么原因会建议不超过两个实例变量?
参考这篇文章,一个原因是实例变量在 before_filter 这样的方法里,会被设置与修改,如果忘记了 before_fitler 做的一些操作,这样在 action 中的实例变量的值可能跟预期不一样,对 debug 之类的产生干扰,这个不知道是不是主要原因?
表示项目大了很难共享不超过两个实例变量吧
如果没有详细的评测,很难说两个很大的对象会比多个小的对象更好。
Rails 的一个 controller action 为整个页面提供数据,因此很多页面都不止一个实例变量。
比如:
这些都是很正常的需求。你当然可以把主要资源之外的数据全放在一起,比如 hash,但这只是为了强行满足所谓的规范,没多大实际意义。为多个资源合理的命名更有利于维护。
多了不好控制。实例变量,谁想改都能改,不好控制。
有的时候,不应该放实例变量的,也被放进去了,应该避免这种情况。
反倒是觉得项目简单,多一两个还好。项目复杂了,能遵守,尽量遵守。
一种推荐,当你需要两个以上实例变量的时候需要考虑下他的必要性,这条建议的可能道理是:很多时候,实例变量的赋值牵扯到数据库查询,而过多的数据库查询会降低页面的处理速度,所以不建议在一个请求的响应中做太多的查询。
当然,随着项目膨胀和需求复杂,很多时候这条原则不好遵守,那么写代码的时候多一个心,想想查询的必要性就好了
controller 和 view 间共享的变量已经很多且大了,不在乎多那么一两个。
更多的是实例变量太多引入的复杂性考虑,
所以我觉得更应该从架构层面考虑怎么把 action(view) 的职能单一化。
存在“两个很大的对象会比多个小的对象更好”这种情况吗?
含有 SQL 查询的 helper method 写在 views 里是不是一个解决方法,或者是很坏的实践?