imageОт переводчика: здесь приведены 12 неплохих практик, которые автор рекомендует использовать при разработке приложений ASP.NET MVC. Я решил перевести этот короткий список для тех, кто только присматривается к ASP.NET MVC и делает в этом фреймворке первые шаги. Надеюсь, данные советы помогут получше понять архитектуру ASP.NET MVC и принять правильные решения при разработке проектов. Некоторые советы спорны, но не забывайте, что автор выражает свое мнение, которое может не совпадать с вашим.

Лучшие практики контроллеров


1. Удаляйте AccountController
Вы никогда не будете использовать его и это супер-плохая практика оставлять демо-код в своих приложениях.

2. Скрывайте контроллеры от внешнего Мира
Зависимости от HttpContext, классов доступа к данным, конфигурации, логгирования, часов и т.п создают трудности для вашего приложения в тестировании (или вовсе неподдающимся тестированию), в дальнейшем развитии и модификации.

3. Используйте контейнер IoC
Для того, чтобы придерживаться правила №2 используйте IoC-контейнер для управления всеми внешними зависимостями. Я использую Ninject v2, но контейнеров множество и, кроме того, можно легко построить собственный контейнер.

4. Скажите «НЕТ» магическим строкам
Никогда не используйте ViewData[“key”], но всегда создавайте ViewModel для каждого View и используйте строготипизированные представления ViewPage.

Магические строки — это зло, потому что они не подскажут вам о граматической ошибке, если вы допутите ее, из-за которой ваше представление не работает, вместо этого, используя строготипизированные модели, вы сможете еще на этапе компиляции определить источник проблемы. И, в качестве бонуса, вы получаете IntelliSense.

5. Постройте свои собственные соглашения
Используйте ASP.NET MVC как базу для вашей (или вашей компании) архитектуры. Создавайте свои собственные соглашения имеющие в себе базовые контроллеры или даже представления, от которых будут наследоваться ваши классы, вместо использования классов по умолчанию.

6. Уделите внима��ие типам запросов (Verbs)
Даже, если вы не используете модель REST (просто RESTfull) используйте определенный Http-тип запроса для каждого действия. Примите паттерн PRG (Post-Redirect-Get): показывайте данные с GET-запросом, модифицируйте данные с POST-запросами.

Лучшие практики моделей


7. Модель предметной области != ViewModel
Модель предметной области представляет предметную область, тогда как ViewModel — предполагает удовлетворение нужд вашего представления, и эти два мира бывают (а обычно так и есть) различными. К тому же, модель предметной области — это данные плюс поведение, это иерархия и построено на базе комплексных типов, тогда как ViewModel — это всего лишь DTO (Data Transfer Objects), плоская модель основанная на строках. Чтобы избежать нудного и приводящего к ошибкам кода маппинга объектов, вы можете использовать AutoMapper. Еще, я рекомендую к прочтению хороший обзор: ASP.NET MVC View Model Patterns.

8. Используйте ActionFilter'ы для общих данных
Это мое решение для лучшей компонентной модели ASP.NET MVC и в будущем я должно быть напишу еще несколько статей на эту тему. Вам не нужны контроллеры для получения данных, которые расшарены между различными представлениями. Мое решение — использовать Action Filter для получения нужных данных и расшаривания их между представлениями. И использовать частичные представления (partial views) для отображения.

Лучшие практики для представлений


9. НИКОГДА не используйте code-behind
НИКОГДА.

10. Пишите HTML каждый раз, когда есть такая возможность
Я полагаю, что web-разработчикам удобно писать HTML (и CSS и JavaScript). Поэтому, они не должны использовать HtmlHelpers только для того, чтобы просто скрыть HTML (например в виде Html.Submit или Html.Button). И опять эта тема для будущих статей.

11. Если есть if, напишите HtmlHelper
Представления должны быть тупыми (dumb) (а контроллеры — тощими и модели — толстыми). Если вы вдруг обнаружили, что пишите «if» в представлении, тогда подумайте над тем, чтобы создать HtmlHelper, чтобы скрыть условное выражение.

12. Уделите внимание выбору вашего view engine
По умолчанию, в ASP.NET MVC используется WebFormViewEngine, но по моему мнению, это не лучший выбор. Я предпочитаю использовать Spark View Engine, так как этот инструмент представляется мне более подходящим для MVC. Что мне в нем нравится, так это то, что поток построен на HTML и циклы «foreach» и выражения «if» тоде определены через «HTML атрибуты».

Загрузки


И слайды и код демонстрации доступны для загрузки. Или вы можете посмотреть слайды онлайн.

Progg it