Как ENFORCED разделение проблем в ASP.NET MVC?
Я изучаю, играю и работаю с ASP.NET MVC с версии Preview 1 в 2007 году (декабрь). Я болею за это с 2008 года и поддерживаю его до конца.
Тем не менее, я продолжаю слышать и читать "ASP.NET MVC обеспечивает строгое разделение интересов", включая чтение в Professional ASP.NET MVC 1.0 Роба Конери, Скотта Хансельмана, Фила Хаака и Скотта Гатри.
Что я не понимаю, так это принудительное исполнение. Что делать, если я определяю свой контроллер с действиями только с
return View();
и в представлении (двигатель представления aspx) я делаю все? (выборка данных, бизнес-логика, принятие решений, рендеринг и т. д.)
Как он (ASP.NET MVC) поддерживает меня, чтобы разделить проблемы?
Я думаю, что это явное преувеличение, и оно должно гласить "предлагает разделение проблем".
Вы можете убедить меня, что это навязывает?
4 ответа
Я не думаю, что это усиливает это, поэтому они, вероятно, ошибаются. Как вы сказали, "предлагает" или "продвигает" - это лучшее слово.
Главное, чтобы он начинался с правой ноги - то есть с отдельного контроллера и вида. Если вы решите сделать что-то сумасшедшее, вас никто не остановит. За исключением, надеюсь, рецензий. И здравый смысл.
Но в отличие от веб-форм, где вы должны очень стараться, чтобы не смешивать проблемы.
Какой механизм вы бы предложили для "принуждения" того типа, который вам нужен? Должна ли инфраструктура выдавать предупреждения, когда цикломатическая сложность кода View превышает некоторый порог? Должна ли среда работать что-то вроде lint
на вашем источнике и шлепает вас по запястью, когда вы делаете вещи не из MVC (какими бы они ни были)?
Если говорить более конкретно, какая польза от всего этого подергивания пальцев? Разве мы не пытаемся писать приложения, которые нравятся нашим пользователям?
Конечно, вы можете сделать все в представлении. Вы были бы просто ужасным программистом и не следовали бы шаблону MVC вообще.
Я также уверен, что есть некоторые вещи, которые вы вообще не можете делать в представлении, только в контроллере. Хотя, может быть, мои.Net и Rails перепутаны.