Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильно ли что один контроллер вызывает другой ? 
:(
    Опции темы
sir_nuf_nuf
Дата 19.7.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: нет
Всего: 31



Товарищи, ответьте пожалуйста на такой архитерктурый вопрос:

Может ли (точнее правильно ли так делать, что)  в MVC приложениях один контроллер вызывает другой ?
Пример:
Есть контроллер для смены пароля, который
  1) проверяет наличие юзера
  2) проверяет ответ на секретный вопрос
  3) собственно меняет пароль
Есть другой контроллер который 
  1) осуществляет авторизацию (через внешнюю систему) по довольно хитрой логике
  2) выставляет сессию

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

P.S.
Я не программирую на Ruby и Rails, использую perl и некое унаследованное подобие MVC.
Вопрос задал в этот форум, т.к. у Rails очень активное коммьюнити и Rails считают образцово-показательной MVC.
Поэтому просьба - ответьте на архитектурый вопрос, стараясь не приводить "слишком альтернативных" решений =)

Это сообщение отредактировал(а) sir_nuf_nuf - 19.7.2010, 15:28


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Vasay
Дата 19.7.2010, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



sir_nuf_nuf, 

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


п.с. Если это не интроweb то было бы неплохо реализовать подтверждение е-маил при смене пароля.





--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
source777
Дата 19.7.2010, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(sir_nuf_nuf @  19.7.2010,  13:04 Найти цитируемый пост)
Может ли (точнее правильно ли так делать, что)  в MVC приложениях один контроллер вызывает другой ?

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


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
sir_nuf_nuf
Дата 20.7.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: нет
Всего: 31



Цитата(source777 @  19.7.2010,  21:19 Найти цитируемый пост)

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


Ясно.. а откуда такое правило появилось ? где - то описано ? 
Хотелось бы понять почему так делать не хорошо, а не тупо следовать правилу.


BTW... допустим у нас есть "сложный сценарий" - например добавление новости, он включает:
1) праверка прав пользователя
2) проверка источника новости
3) создание новости
4) обновление счетчиков пользователя
5) обновление счетчиков источника
6) рассылка уведомлений в различные внешние сисетмы
7) можно придумать еще..

Куда правильно поместить этот код ?   В модель ?  В контроллер ? В хелпер ?

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





--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
fell
Дата 21.7.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 17.12.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



ну уж точно не в хелперы smile
Вы себе представляете для чего нужны модели smile?
модели описывают объект, его свойства.
Контроллеры взаимодествуют с объектом и с представлением,
а хелперы для представления в основном создаются. 

Цитата

создание новости

это точно через контроллер, с помощью модели "новости".
Рассылка уведомлений через класс, компонент mail вероятно делается.
Счетчик пользователей не очень понятно, что за счетчик. Кол-во пользователей системы ? Кол-во пользователей можно запрашивать из модели "пользователи" с помощью контроллера и выводить в представление, например в админку.  

Это сообщение отредактировал(а) fell - 21.7.2010, 12:53
PM MAIL WWW   Вверх
source777
Дата 22.7.2010, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(sir_nuf_nuf @  20.7.2010,  10:38 Найти цитируемый пост)
Ясно.. а откуда такое правило появилось ? где - то описано ? 

Так это собственно по определению паттерна. Открой любую статью по MVC и посмотри на схему паттерна: видишь стрелку, выходящую из контроллера и замыкающуюся на него же? Вот и я не вижу, т.е. в MVC контроллер не может вызывать контроллер напрямую по определению.

Добавлено через 8 минут
Цитата(sir_nuf_nuf @  20.7.2010,  10:38 Найти цитируемый пост)
Другими словами - этот код описывает процесс, а не данные. 

И что смущает? Для процессов контроллеры как раз и предназначены, только если у нас есть процесс "создание новости", то он весь должен быть в NewsController#create, а оттуда уже можно рулить разными моделями и мейлерами, а проверять права лучше через before фильтры, которые тоже являются частью контроллера.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.