Как должен выглядеть этот конкретный класс обслуживания в моем домене? - PullRequest
0 голосов
/ 07 февраля 2011

Я пришел из мира WebForms, где вся логика находится в коде позади aspx-страниц. Прочитав несколько книг по ASP.NET MVC, прослушав некоторый подкаст и посмотрев несколько видео на Tekpub, я решил, что пришло время взглянуть на вещи немного по-другому.

К сожалению, я уже застрял.

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

Я знаю, что я должен держать свои контроллеры тонкими, поэтому я думаю, что я должен использовать какой-то класс обслуживания (давайте назовем его WebsiteService), чтобы сделать это. Я использую Entity Framework для доступа к данным, и все мои представления используют определенные ViewModels. Когда я создаю или редактирую сайт, должны произойти следующие четыре вещи:

  • Подтвердить ввод
  • Добавить информацию о Веб-сайте в базу данных (Обновите информацию, если это Правка)
  • Создать каталог на диске (возможно, переименовать каталог, если это Edit)
  • Добавление заголовка узла на веб-сайт IIS (возможно удалить старый заголовок узла и новый, если он является правкой)

По сути, я полагаю, что WebsiteService должен выполнить более продвинутую проверку, записать в базу данных, создать / отредактировать каталог, добавить / удалить заголовки хоста и вернуть что-то контроллеру, чтобы указать, успешно это или нет.

Как должен выглядеть этот класс? У меня есть несколько вопросов, на которые я не знаю ответа.

  1. Должен ли WebsiteService также преобразовывать ViewModel CreateWebsite в фактический класс Website или что-то еще делать так, чтобы WebsiteService принимал фактический объект Website?
  2. Базовая проверка входных данных выполняется с использованием атрибутов Validation в ViewModel. Также следует провести более тщательную проверку («Есть ли уже сайт с таким доменным именем в базе данных?»). Должен ли это делать и сервис WebsiteService?
  3. Должны ли все 3 шага (сохранить в базе данных, создать каталог, добавить заголовок узла в IIS) одним открытым методом (WebsiteService.SaveWebsite(ViewModels.CreateWebsite website)) или я должен предоставить отдельные методы, которые должен вызывать контроллер? (Наверное, нет, потому что я полагаю, что порядок вызовов важен.)

1 Ответ

1 голос
/ 07 февраля 2011

Ответы на это частично субъективны, вопрос мнения, но вот мои мысли:

  1. Это может .Но лучшим подходом было бы использовать AutoMapper , чтобы сделать это для вас.Один из «обязательных» инструментов с открытым исходным кодом для управляемых данными приложений MVC.

  2. Да - проверка входных данных должна выполняться с помощью атрибутов проверки в моделях представления.Более обширная проверка / проверка домена / бизнеса может проводиться либо в службе, либо на самих моделях домена.Я предпочитаю (и использую) второй вариант.Мои доменные модели также являются моими POCO (используются EF), но у меня есть дополнительные методы / свойства, специфичные для домена (но не базы данных).

  3. Нет, я думаю, это должнов отдельных методах, главным образом для проверки / разделения проблем.У вас есть три вещи: сохранение базы данных, запись файлов и работа IIS.Это для меня должно быть три разные услуги.Я бы попросил ваш "WebsiteService" делегировать эти задачи другим службам.

...