Я помню очень хорошее слово от Майка Кона о Agile: " Лучшая практика не существует "
Таким образом, вы всегда должны продолжать улучшать и реорганизовывать не только свой код, но и свой дизайн, архитектуру, методологию и т. Д., И для этого вам потребуется следующее:
- Поместите ремонтопригодность как обязательное требование в начале всей вашей работы
- BDD (разработка, управляемая поведением)
- TDD (тестовый дизайн)
- TDD (разработка через тестирование)
- Юнит-тест с соответствующим процентом покрытия кода
- Автоматизируйте развертывание и тестирование вашей сборки (Полная автоматизация всех повторяющихся действий)
Я знаю, это немного длинное введение, но необходимо понять, почему я посоветую вам сделать мой подход следующим образом
Мой подход по умолчанию в проекте MVC следующий
- Свести ViewModel, который сопоставлен с использованием слоя сопоставления с помощью
библиотека картографии
- Модель предметной области. Рассмотрим инструкции DDD
- Сервисный уровень, работающий с контроллерами в качестве сервисов
бизнес логика
- Репозитории, которые используются сервисным уровнем и единицей работы
Но, как я уже говорил, Best Practice не существует , поэтому я начну свою разработку с использованием BDD и TDD, и для реализации этого я основатель и создаю инфраструктуру " DevMagicFake " Эта платформа, опубликованная на CodePlex, позволит мне завершить и завершить мое представление и сделать его реально работающим без какого-либо дизайна или кода для подчеркивающих слоев вообще
После того, как функция будет работать со всеми модульными тестами, которые охватывают большую часть ее поведения, я начну рефакторинг всего
- ViewModel
- Отображение
- Услуги
- и т.д.
и для каждого рефакторинга я запускаю все необходимые модульные тесты, чтобы выяснить, не испортил ли мой рефакторинг мой код или нарушил принятые и знающие поведения приложения, если это произойдет, я исправлю любой разрыв
Так, например, чтобы сохранить клиента и получить его, я буду использовать только одну строку кода в каждом методе действия, как показано ниже
public ActionResult List(CustomerVeiwModel customerVeiwModel)
{
var repository = new FakeRepository<CustomerVeiwModel >();
repository.Save(customerVeiwModel);
И чтобы найти клиента, мне просто нужно написать следующее:
var repository = new FakeRepository<CustomerVeiwModel>();
var customer = repository.GetById(1);
Поэтому я всегда принимаю решения ViewModel, Repository, Architecture и т. Д. После 2 баллов
- Функция выполнена и работает как клиент или бизнес-эксперт
Ожидается
- У меня есть модульные тесты, которые охватывают все функции и ответы
Это позволит мне понять, что делать с дизайном, разработать архитектуру, и даст мне уверенность, что мой код действительно работает с высоким качеством и, как ожидал заказчик
В конце, есть только одно слово, я всегда держу рефакторинг и рефакторинг, каждая новая функция, модификация, проблема или проблема происходят со мной, это может привести к новой концепции архитектуры или проектным решениям, которые изменят все приложение, и я Я всегда готов к ним.
кстати, вы можете скачать проект MVC3, который использует мою форму подхода DevMagicFake в CodePlex, вы найдете проект под названием " TryFakeMVC3 "