Куда идет бизнес-логика в MVC? - PullRequest
10 голосов
/ 11 ноября 2011

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

Мое приложение будет часто использовать JQuery AJAX (которое будет вызывать действия контроллера для различных целей, таких как зависимое взаимодействие, проверка). Я определенно буду использовать концепцию ViewModel, но мне все еще неясно, где должна находиться бизнес-логика. Я не хочу вставлять контроллер или модель. Должен ли я поместить его в отдельный сервисный слой?

Ответы [ 5 ]

11 голосов
/ 11 ноября 2011

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

Редактировать: обратите внимание, что контроллер тесно связан с httpcontext, поэтому будет очень разумно переместить логический уровень на другой dll-слой.

7 голосов
/ 11 ноября 2011

M в MVC - это все, что используется для извлечения и обработки информации, которую вы используете в своем приложении.Поэтому бизнес-уровень является его частью.

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

Я обычно создаюбиблиотеку третьего класса и поместите в нее все определения (сервисные интерфейсы и модели предметной области).тем самым вы будете следовать разделенному шаблону интерфейса и упростите даже позднее замену реализации (и тестирование своего бизнес-уровня)

2 голосов
/ 06 июля 2017

Теоретически в бизнес-логике задействован средний уровень 3-уровневой архитектуры. enter image description here

2 голосов
/ 11 ноября 2011

Вы можете просто поместить некоторую логику бизнеса в отдельный класс c # и ссылаться на нее в контроллерах. Вот как код был изолирован в дни веб-формы.

1 голос
/ 11 ноября 2011

Самые простые примеры, которые я видел, помещают простую бизнес-логику в контроллер, но в идеале вы можете создать бизнес-уровень.

Хороший пример отделения бизнес-логики с помощью MVC3 можно увидеть в Microsoft.Проект Silk, который вы можете скачать здесь .В этом решении бизнес-логика разделена на другой проект, который отличается от проекта MVC.

В этом проекте вы можете видеть, что логика контроллера просто обрабатывает связь между представлениями и моделями представления (обратите внимание на модели представления).а не модели бизнес-уровня).Модели представления просто содержат информацию, которая будет передана представлениям, поэтому, если поле в представлении изменяется, поле в модели представления также изменяется.Проект также идет дальше, отделяя модели представлений от моделей представлений для передачи данных в представления и формируя модели для передачи данных обратно, но это вопрос выбора.

В этом проекте используется шаблон проектирования сценария транзакцииза свою бизнес-логику.Контроллер передает информацию на бизнес-уровень, используя свои собственные модели представлений, которые реализуют интерфейс в структуре шаблонов команд.Информация, передаваемая обратно из бизнес-уровня, осуществляется через собственные бизнес-модели бизнес-уровней.Я бы настоятельно рекомендовал вам взглянуть на этот проект, чтобы лучше понять, как достигается разделение.

Для дальнейшего изучения бизнес-уровней я бы также порекомендовал вам взглянуть на Wrox Enterprise.NET , где несколько глав дают хорошее обсуждение вариантов структурирования бизнес-уровня, первым из которых является Шаблон транзакции, используемый в проекте Silk.

Надеюсь, это поможет.

...