Этот вопрос немного риторический. В какой-то момент у меня возникло ощущение, что ASP.NET MVC не является подлинной реализацией шаблона MVC. Или я этого не понял.
Рассмотрим следующую область: электрическая лампа , переключатель и датчик движения . Они соединены вместе и при входе в помещение детектор движения включает лампочку. Если я хочу представить их как MVC:
- переключатель является моделью, потому что он содержит состояние и содержит логику
- лампа - это вид, потому что она представляет состояние модели человеку
- детектор движения является контроллером, поскольку он преобразует действия пользователя в общие команды модели
Коммутатор имеет одно закрытое поле (вкл / выкл) в качестве состояния и два метода (PressOn, PressOff). Если вы вызываете PressOn, когда он выключен, он переходит в состояние «Вкл.», Если вы вызываете его снова, состояние не меняется.
Лампа может быть заменена зуммером, детектором движения с таймером или кнопкой, но модель по-прежнему представляет ту же логику. В конечном итоге система будет иметь такое же поведение.
Вот так я понимаю классическую декомпозицию MVC, поправьте меня, если я ошибаюсь.
Теперь давайте разберем его в ASP.Net MVC.
- Лампа еще вид
- Контроллер будет переключателем + детектор движения
- Модель - это некоторый объект, который просто передает состояние лампочке.
Таким образом, логика, которая определяет поведение, переходит к контроллеру.
Вопрос 1: Правильно ли я понимаю MVC и ASP.NET MVC?
Вопрос 2: Если да, согласны ли вы с тем, что ASP.NET MVC не является 100% точной реализацией?
И вернемся к жизни. Последний вопрос - как отделить модель от контроллера в случае ASP.NET MVC. Там может быть две крайности. Контроллер выполняет базовые функции и вызывает модель для выполнения всей логики. Другой - контроллер выполняет всю логику, а модель - это просто что-то вроде класса со свойствами, сопоставленными с БД.
Вопрос 3: Где мне провести черту между этими крайностями? Как сбалансировать?
Спасибо,
Андрей