rails 3, есть ли способ сохранить тощий контроллер, когда контроллер использует много информации о сеансе? - PullRequest
1 голос
/ 06 марта 2011

Мне нравится хороший тощий контроллер так же, как и следующий парень.

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

Следовательно, контроллер имеет десятки методов, по одному для каждого «взаимодействия», и эти методы интенсивно читают (и иногда записывают) сеанс.

Насколько я понимаю, если вы обращаетесь к сеансу в своих модельных методах, вы делаете что-то ужасно "неправильное" ... но иметь более 100 строк кода в методе контроллера PER для десятков методов контроллера кажется "неправильным" тоже.

Учитывая этот сценарий, каков наилучший компромисс между контроллерами жира и моделями, которые получают доступ к сеансу?

1 Ответ

1 голос
/ 07 марта 2011

Недавно я столкнулся с подобной проблемой.Я писал и приложение, которое сильно зависело от удаленного API, который принимал / возвращал JSON.Впоследствии у меня было очень несколько моделей в моем приложении, и мои контроллеры были довольно длинными.

В итоге я написал собственный синтаксический анализатор module в lib/ и сделал вызовы к модулю (который обрабатывал большую часть логики, которая обычно существовала бы в контроллере)следующее:

module RemoteParser
  def get_user(user_id)
    result = ActiveSupport::JSON.parse(NetHttp.get('http://www.example.com/'))
    session[:received_user] = true
  end
end

Теперь ваши контроллеры могут снова стать худыми:

class SomeController < ApplicationController
  def index
    @user = RemoteParser::get_user(params[:id])
  end
end

Я просто хочу добавить, что это невероятно надуманный пример такого использования.Если вы предоставите дополнительную информацию о том, что вы запрашиваете, и т. Д., Я могу помочь вам в дальнейшем.

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