#java #model-view-controller
#java #model-view-controller
Вопрос:
Я занимаюсь игрой!фреймворк java и попытка понять MVC.
Рассмотрим этот сценарий: в приложении для ведения блога есть модераторы и пользователи, и оба могут обновлять сообщения. Обновления модераторов немедленно сохраняются. Обновления пользователей ставятся в очередь для утверждения модератором. В MVC, где мы помещаем логику, чтобы определить, следует ли обновлять или ставить обновления в очередь?
Один из способов сделать это — в контроллере (псевдокод):
public void function update() {
User user = User.find("byEmail");
if ( user.isModerator() ) {
post.update( args );
}
else {
// save post in a temporary table where it awaits approval.
}
}
Правильно ли я использую этот подход или есть лучшие альтернативы?
Ответ №1:
Я знаю, что это довольно старый вопрос, но у меня был такой же, так что это может помочь:
В моем текущем проекте политика заключается в том, чтобы распределять проверки авторизации. Таким образом, проверки будут выполняться там, где они подходят лучше всего:
- если это важно для согласованности данных, проверки выполняются в модели (очень редкие случаи, должны быть указаны в документации API!).
- большинство проверок выполняется на уровне контроллера, поэтому большинство проверок находятся в одном месте.
- некоторые проверки выполняются в «Представлении» (это означает, что они управляют выводом JSON API, а это, в свою очередь, изменяет поведение во внешнем интерфейсе). Они довольно редки, поскольку в основном основаны на данных, поступающих с контроллера, а не запрашивают разрешения пользователя напрямую.
Я пришел к этому решению после прочтения этого сообщения. Это дает хорошее представление о том, почему использование контроллера является хорошей идеей, и каковы альтернативы.
Основная причина, по которой я выбрал контроллер в качестве места для проверки авторизации, заключается в том, что он позволяет модели (и данным, которыми она управляет) быть независимыми от логики приложения, которая включает авторизацию.
Пожалуйста, имейте в виду, что это полностью зависит от того, чего вы хотите достичь. Я просто хотел показать, что работает для меня.