Я задавал себе этот вопрос почти каждый раз, когда получаю новый проект. Я обычно выбираю одно из двух решений:
1). Один контроллер, один вид
Я почти никогда не выбираю это решение в наши дни, если проект не очень прост, и только один или два типа пользователей. Если вы получаете несколько типов пользователей, лучше использовать решение № 2. Хотя это решение может быть привлекательным, потому что вы думаете, что сэкономите некоторое время, написав меньше кода, но в итоге ваш контроллер и представление будут усложняться. Не говоря уже о крайних случаях, которые вы должны рассмотреть. Обычно это означает ошибки.
Моей компании когда-то приходилось спасать неудачный проект, у него было 3 типа пользователей. (администратор, бизнес и участник). Они использовали решение № 1. Код был в ужасном состоянии (и поэтому нас попросили спасти этот проект). Мы в шутку говорили, что это не MVC, а MMM. (Модель-модель-модель) Это связано с тем, что бизнес-логика не была должным образом извлечена и внедрена в модели, но также распространена в контроллерах и представлениях.
2). Несколько контроллеров, несколько просмотров
Я использую это решение все больше и больше в эти дни. Я обычно называю пространство контроллеров пользовательскими типами. Например:
В "приложении / контроллерах"
class BookController < ApplicationController
end
и в "app / controllers / admin"
class Admin::BookController < Admin::BaseController
end
Мне нужно учитывать обычных пользователей, когда я заполняю BookController, и мне нужно учитывать только пользователей-администраторов, когда я заполняю Admin::BookController
Я не уверен, что есть лучшие способы, но это то, что я узнал из дюжины проектов, которые я сделал до сих пор ...