Передача только двух переменных между контроллером и представлением - лучшая практика? - PullRequest
11 голосов
/ 13 августа 2011

Нашел эту передовую практику, и в RubyMine она даже прошла проверку: «Только одна или две переменные экземпляра совместно используются каждым контроллером и представлением.)» (Контрольный список качества кода Ruby on Rails)

Каков, например, предлагаемый способ - передать два массива и их суммарные значения, вычисленные в контроллере, что составляет 4 переменные экземпляра?Или передать в таблицу данных Javascript: данные, общее количество элементов, общее количество отображаемых элементов?

1 Ответ

16 голосов
/ 13 августа 2011

Я думаю, что самый разумный способ соблюсти это - перейти от множества простых объектов к нескольким сложным объектам.

Скажем, например, у вас есть три отдельные переменные:

  1. массив данных
  2. всего элементов данных
  3. всего отображаемых элементов

Теперь вместо использования 3 отдельных переменных экземпляра (одна Array, две Fixnum), вы можете создать Hash, который содержит все три из них, или, возможно, определить новый класс, который отвечает на методы, такие как total_items, которые вы можете вызвать в представлении.

Фактически, как одинНапример, will_paginate делает что-то вроде этого: разбитая на страницы коллекция элементов не просто представляется в виде массива, а в виде объекта WillPaginate::Collection, который отвечает на такие методы, как current_page, total_pages, total_entries и т. д.Это более естественно, чем наличие отдельных переменных, так как оно более точно отображает взаимосвязь между информацией, которой вы хотите поделиться с вашим взглядом.

Как правило, я бы предложил, чтобы все, чтоСоответствующая тесно связанная информация всегда должна быть в одной переменной экземпляра, но все, что на самом деле вообще не связано, не следует «принудительно» вводить в одну переменную из-за этих лучших практик.У каждого правила есть исключение, поэтому, если, например, у вас действительно есть 5 различных компонентов, которые не имеют абсолютно никакого отношения друг к другу (что встречается редко), слепое следование лучшим рекомендациям может быть не самой лучшей идеей.

Итог: поймите идею этих правил, и вы будете знать, что делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...