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

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

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

Ответ 1

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

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

  • массив данных
  • общее количество элементов данных
  • отображаются все элементы.

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

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

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

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