Недавно при обучении своего друга технологии ASP.NET MVC я задумался о том, какие полезные советы можно дать начинающему разработчику, чтобы у него сразу появился правильный стиль написания веб-проектов.
Итак, начнем.
Контроллер
Удалите AccountController. Никогда не используйте его. Использовать демонстрационный код в своих приложениях — очень плохая практика.
Изолируйте контроллеры от окружающего мира. Зависимость от HttpContext, от классов доступа к данным, конфигурации, логирования и т.д. делает приложение сложным (если не невозможным) для тестирования, доработки и модификации.
Используйте IoC Container. Для выполнения предыдущего совета используйте IoC Container для управления всеми внешними зависимостями. Я использую Ninject, однако существует множество других, и, кроме того, легко можно сделать свой собственный, удовлетворяющий всем вашим потребностям.
Скажите нет «магическим» строкам. Никогда не используйте ViewData[“key”], а всегда создавайте ViewModel на каждое представление, и используйте строго-типизированные представления.
Магические строки плохи тем, что с ними вы никогда не знаете, когда ваше представление перестанет работать из-за ошибки в написании строки. При использовании же строго-типизированной модели в случае возникновении проблем вы получите ошибку времени компиляции. Кроме того, вы, в качестве бонуса, получаете поддержку Intellisense.
Создайте свои собственные соглашения. Используйте ASP.NET MVC как основу для создания вашей архитектуры. Введите соглашения по наследованию ваших контроллеров и, возможно, представлений от ваших базовых классов, а не от стандартных.
Уделите внимание глаголам. Используйте атрибуты Http для каждого действия: отображайте данные с помощью GET, модифицируйте — POST.
Модель
Предметная модель (DomainModel) != модели представления (ViewModel). Предметная модель представляет предметную область, в то время как модель отображения разработана для нужд отображения и эти два понятия могут (а в основном, так и есть) отличаются. Более того, предметная модель — это данные плюс поведение, иерархическая структура и составные сложные типы, в то время как модель отображения — это всего лишь DTO, плоская и состоит из строк. Для того, чтобы избежать утомительного и подверженного ошибкам кода, вы можете использовать AutoMapper.
Используйте ActionFilter для «общих» данных. Это мое решение для компонентизации ASP.NET MVC. Вы же не хотите, чтобы ваши контроллеры получали данные, которые используются несколькими представлениями. Мой подход — использовать фильтры действий для получения данных, которые нужны нескольким представлениям с дальнейшим использованием частичных представлений для их отображения.
Представление. Никогда не используйте код в представлении.
Пишите HTML каждый раз, когда можете. Я думаю, что веб-разработчики должны чувствовать себя комфортно в написании HTML (CSS и JavaScript) кода. Поэтому вы никогда не должны использовать HtmlHelper’ы только для того, чтобы спрятать HTML (например, Html.Submit или Html.Button).
Если в вашем представлении появился IF, напишите HtmlHelper. Представления должны быть простыми (также как контроллеры — тонкими, а модели — толстыми). Если вы захотели написать «if», самое время подумать о написании HtmlHelper для сокрытия условного выражения.
Автор: valerasergeevich