【问题标题】:Passing only two variables between controller and view - best practice?在控制器和视图之间仅传递两个变量 - 最佳实践?
【发布时间】:2011-08-13 23:20:12
【问题描述】:

找到了这个最佳实践,它甚至在 RubyMine 中得到了检查: “每个控制器和视图之间只共享一个或两个实例变量。)” (Ruby on Rails Code Quality Checklist)

例如,建议的方法是什么 - 传递两个数组及其在控制器中计算的总值,这会产生 4 个实例变量?或者将数据、总项目、显示的总项目传递给 Javascript 数据表?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我认为尊重这一点的最明智的方法是从许多简单的对象变为少数复杂的对象。

    例如,假设您现在有三个单独的变量:

    1. 数据数组
    2. 数据项总数
    3. 显示的项目总数

    现在,您可以创建一个包含所有三个实例变量的Hash,而不是使用 3 个单独的实例变量(一个 Array,两个 Fixnum),或者定义一个新类来响应方法,例如total_items 可以在视图中调用。

    事实上,作为一个例子,will_paginate 做了这样的事情:一个分页的项目集合不简单地表示为一个数组,而是一个WillPaginate::Collection 对象,它响应诸如current_page、@ 987654328@、total_entries 等。这比单独的变量更自然,因为它更准确地映射了您有兴趣与视图共享的信息之间的关系。

    根据经验,我建议任何与密切相关的信息对应的东西都应该放在一个实例变量中,但是任何根本不相关的东西都不应该因为这些而被“强制”到一个变量中最佳实践。每条规则都有一个例外,因此,例如,如果您认为确实有 5 个不同的组件彼此完全没有关系(这种情况很少见),那么盲目地遵循最佳实践可能不是最好的主意。

    底线:了解这些规则背后的想法,你就会知道该怎么做。

    【讨论】:

    • +1,同意:一般规则不能规定所有具体内容。他们只是在这里让您三思而后行。
    • 非常好的答案,知道如何对项目进行分组。也很想得到一个答案,为什么用四个键传递哈希比四个变量更好?写 (at)category[:key1], (at)category[:key2] 比写 (at)key1, (at)key2, (at)key3 更费劲
    • 因为它为您提供了更好的信息模型。通过将变量分组在一起,您可以模拟它们之间的关系。只有三个变量,效果很小,几乎没有意义,但如果你有数百个变量,这很重要,这就是这些一般设计原则的来源。如果您定义新类而不仅仅是哈希,或者如果您将控制器变量换成模型方法,您还可以增加代码的可重用性,并且在这种情况下好处更加明显。
    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2012-07-19
    • 2013-05-13
    • 2012-01-27
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    相关资源
    最近更新 更多