![]() |
|
|
![]()
|
|
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 2 Всего: 73 |
sir_nuf_nuf,
Для решения такой задачи я бы сделал дополнительное действие в логин контроллере, которое обслуживало бы редирект из контроллера смены пароля. п.с. Если это не интроweb то было бы неплохо реализовать подтверждение е-маил при смене пароля. -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
| source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 12 Всего: 56 |
Если напрямую, то неправильно в рамках MVC, а если через редирект, то пожалуйста. В общем, любой вызов контроллера должен происходить из вне, а не изнутри приложения. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: нет Всего: 31 |
Ясно.. а откуда такое правило появилось ? где - то описано ? Хотелось бы понять почему так делать не хорошо, а не тупо следовать правилу. BTW... допустим у нас есть "сложный сценарий" - например добавление новости, он включает: 1) праверка прав пользователя 2) проверка источника новости 3) создание новости 4) обновление счетчиков пользователя 5) обновление счетчиков источника 6) рассылка уведомлений в различные внешние сисетмы 7) можно придумать еще.. Куда правильно поместить этот код ? В модель ? В контроллер ? В хелпер ? На мой взгляд его не логично помещать ни в один класс модели, т.к. он не имеет прямого отношения к какой-либо одной моделе. Другими словами - этот код описывает процесс, а не данные. Думаю, все понимают, что часто процессы могут быть более длинными и сложными. |
|||
|
||||
| fell |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.12.2008 Где: Санкт-Петербург Репутация: нет Всего: нет |
ну уж точно не в хелперы
Вы себе представляете для чего нужны модели модели описывают объект, его свойства. Контроллеры взаимодествуют с объектом и с представлением, а хелперы для представления в основном создаются.
это точно через контроллер, с помощью модели "новости". Рассылка уведомлений через класс, компонент mail вероятно делается. Счетчик пользователей не очень понятно, что за счетчик. Кол-во пользователей системы ? Кол-во пользователей можно запрашивать из модели "пользователи" с помощью контроллера и выводить в представление, например в админку. Это сообщение отредактировал(а) fell - 21.7.2010, 12:53 |
|||
|
||||
| source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 12 Всего: 56 |
Так это собственно по определению паттерна. Открой любую статью по MVC и посмотри на схему паттерна: видишь стрелку, выходящую из контроллера и замыкающуюся на него же? Вот и я не вижу, т.е. в MVC контроллер не может вызывать контроллер напрямую по определению. Добавлено через 8 минут И что смущает? Для процессов контроллеры как раз и предназначены, только если у нас есть процесс "создание новости", то он весь должен быть в NewsController#create, а оттуда уже можно рулить разными моделями и мейлерами, а проверять права лучше через before фильтры, которые тоже являются частью контроллера. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
![]()
|
| Правила форума "Ruby on Rails" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Ruby On Rails | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |