2017-01-24 17 views
1

Я работаю над приложением, в котором необходимы как уведомления, так и история, и что делает его довольно сложным, так это то, что существует понятие «контекст».Лучшая практика: должен ли я создать новый контроллер или нет? чтобы уважать хорошую архитектуру

Например, если пользователь находится в определенном виде, он должен видеть только уведомления и истории, связанные с этим контекстом. Для каждого контроллера есть контроллер, но когда я хочу обновлять уведомления на стороне клиента (прямое обновление с помощью Pusher), со стороны сервера мне нужно знать контекст, в котором находится пользователь. Решение на месте - это отправить запрос ajax со стороны клиента, указав контекст, в котором он находится, с курсом.

Теперь вопрос заключается в том, чтобы уважать хорошую архитектуру, поскольку запрос ajax отправляет контекст, который используется как для уведомления, так и для истории, должен ли я создать контроллер для решения этой проблемы (и затем этот контроллер свяжется с обоими контроллеры), или я должен использовать один из них ?. Спасибо

+0

Каковы типы «контекста»? И нужно ли быть Ajax по любой другой причине? – Swards

+0

, когда пользователь находится в своем профиле, он видит все уведомления, но когда пользователь находится в представлении приложения, он видит только те, которые связаны с этим приложением. и да, использование ajax является обязательным, если у вас есть другая альтернатива для отправки живых уведомлений пользователю без перезагрузки его страницы, я открыт для нее. –

+0

Я честно чувствую, что модуль уведомлений, предположительно, не то, что должен делать контроллер, а вместо этого - это то, с чем контроллер должен * взаимодействовать * с. Я бы сделал отдельный модуль, который является глобальным и доступным для любых контроллеров, тогда вы можете сделать что-то вроде: controller -> notification_module -> server -> notification_module -> controller – Edward

ответ

1

Да, вы можете создать другое пространство имен/модуль для сценария приложения и поставить под него еще один контроллер уведомлений. Идентификатор приложения должен быть где-то в URL-адресе, тогда контроллер/действие будет потомком этого, ожидая наличия экземпляра @application для фильтрации уведомлений.

Итак, у вас будет контроллер под верхним уровнем, но также и в пространстве имен приложений. Преимущество заключается в том, что вы получаете два представления, чтобы вы могли показать несколько разные вещи, не имея кучу условной логики в представлениях или методах действий.

Конечно, вы можете просто иметь два маршрута и поместить условную логику в действие # контроллера, поэтому, если есть приложение application_id, оно фильтрует по-другому, это может быть то, что вы сейчас делаете. Я предпочитаю отделить условную логику как можно дальше от маршрутов, поэтому мои контроллеры проще.

Запрос Ajax в идеале может/должен быть ударять один и тот же контроллер # действие с форматом js так это получать ту же информацию, и используя одни и те же запросы, что делает с index.js.erb вместо index.html.erb.

+0

Прежде всего спасибо за ваш ответ, я объясню немного больше. Как уведомление, так и история используются многими моделями, а не только для приложений, и для каждого из них я могу иметь до 10 контекстов. , делая маршруты для каждого, сделают route.rb просто огромным, чем он есть. уведомление и история находятся в полиморфной связи с соответствующими моделями, и у них обоих есть свои собственные контроллеры, нет логики ни в представлениях, ни в контроллерах. –

+0

Похоже, вы можете захотеть что-то вроде полиморфного контроллера, это может быть только иметь индексные и отображаемые действия - потребовать «тип» и «идентификатор» и отвечать списком или отдельным объектом. – Swards

+0

Я никогда не слышал о полиморфных контроллерах, если у вас есть хорошие ссылки, я открыт для этого. он больше связан с уважением шаблона mvc, как я уже сказал, вся система уведомлений и истории уже разработана и работает хорошо. Вопрос в том, должен ли я создать контроллер, который будет обрабатывать контекст, а затем он будет вызывать alertController и historyController, или я могу использовать один из них, а затем позвонить другому? другими словами, контекст является общими между ними, поэтому, чтобы уважать шаблон, я не должен называть один из другого, или это нормально? –

 Смежные вопросы

  • Нет связанных вопросов^_^