Немного потерян с организацией реального кода приложения в asp.net mvc - PullRequest
3 голосов
/ 14 ноября 2011

У меня есть следующий сценарий реального мира, несколько упрощенный ради этого примера

У меня есть объект, назовем его Movie, который будет состоять из нескольких атрибутов, таких как

  • дата выхода
  • актеров (массив)
  • жанр
  • рейтинг

Мне нужно, чтобы у меня была форма для ввода нового фильма со следующими элементами в форме:

  • календарь дат
  • выпадающий список с актерами
  • поиск по жанрам
  • рейтинговое поле со звездами

Какой был бы понятный способ организовать мой код с использованием asp.net mvc, пожалуйста, укажите где

  • логика доступа к данным идет
  • бизнес-логика идет (проверка и т. Д.)
  • Я бы хотел использовать концепцию ViewModel здесь

Пока у меня есть

  • модель фильма
  • Модель просмотра MovieViewModel
  • Интерфейс IMovieRepository

Но мне неясно, как массивы актеров / жанров вписываются в это и куда я могу получить данные для этого ... это входит в интерфейс IMovieRepository? Я создаю другой интерфейс для этого, другими словами, я создаю интерфейс для ViewModel? Я тоже создаю интерфейс для загрузки жанров? Другой вопрос: Как я могу использовать ViewModels? Нужно ли что-то менять в настройках приложения?

Действие контроллера имеет что-то вроде View () в своем теле .... как мне передать ViewModel туда? Мне нужно?

В общем, я просто хочу простой пример того, как вы реализуете сценарий выше.

Я новичок в MVC и пытаюсь убедиться, что мой код организован хорошо.

1 Ответ

0 голосов
/ 15 ноября 2011

Я помню очень хорошее слово от Майка Кона о 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 "

...