Подтвердить что ты не робот

Бизнес-логика ASP.NET MVC в модели домена и уровень обслуживания

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

1 - Модели доменов. Что это на самом деле? В моей папке Model у меня есть только куча классов, соответствующих моей базе данных. Сначала я использую EF-код. Я предполагаю, что это мои модели домена.

2 - Уровень обслуживания. Этот ответ предлагает уровень сервиса, и я думаю, что это имеет смысл. Я решил пойти с этим. Однако Мартин Фаулер "Модели анемичных доменов" перепутали мой разум.

Я не уверен, как добавить логику в свои модели домена.

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

4b9b3361

Ответ 1

Во-первых, ваша модельная папка в проекте Asp.Net MVC должна использоваться для ViewModels. Это модели, которые ваши контроллеры отправляют в ваши представления. Они должны быть высоко оптимизированы для представления, что означает только свойства, необходимые для представления, и ничего больше.

То, что вы делаете, модели домена, такие же, как и бизнес-модели, и принадлежать к вашему бизнес-уровню. Папка Model в вашем проекте Asp.Net MVC - это модели для вашего слоя пользовательского интерфейса.

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

Эти модели бизнеса/домена обычно являются POCOs, но они не обязательно должны быть. Вот как я иногда настраивал свои бизнес-модели:

public class BusinessObject
{
    private DataObject _dataObject;

    public BusinessObject(DataObject dataObject)
    {
        _dataObject = dataObject;
    }

    public int BusinessId
    {
        get {return _dataObject.Id;}
        set {_dataObject.Id = value;}
    }

    public string Name
    {
        get {return _dataObject.Description;}
        set {_dataObject.Description = value;}
    }
}

Ответ 2

Я предпочитаю НЕ иметь бизнес-логику в моделях домена. Я обычно использую свои модели домена как POCO для представления таблиц/схем DB.

Сохранение бизнес-логики от моделей домена позволит мне повторно использовать мою модель домена с другим проектом.

Вы можете рассмотреть средний уровень между вашими контроллерами и уровнем доступа к данным /Repositary layer для обработки этого. Я бы назвал это слоем службы.

Ответ 3

Я знаю, что это уже ответили, но я классифицирую модели на 3 группы.

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

DomainModels - обычно это классы бизнес-логики с тяжелым весом. Обычно они моделируют основные бизнес-правила для того, что вы делаете. Эти классы часто очень сплоченны, и большинство работ, которые делают ваш сайт особенным, происходят. Я сказал, что эти модели, как правило, тяжеловесы, но на самом деле, если весь ваш проект выполняется, это взять данные от пользователя и вставить его в базу данных, этот класс будет небольшим классом сопоставления данных. Много раз вы увидите, что эти классы состоят из моделей персистентности и возвращают модели просмотра.

PersistenceModels - это модели вашего механизма сохранения. Для большинства из нас это означает моделирование таблицы базы данных, но также может быть сложным документом nosql или json (или любым другим) данными, которые возвращаются из запроса api. Их ответственность заключается в том, чтобы обрабатывать мирскую плиту котла, какую форму занимают ваши внешние данные.

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

Ответ 4

Логика управления потоком приложений принадлежит контроллеру.

Логика доступа к данным принадлежит репозиторию.

Логика проверки относится к уровню обслуживания.

Уровень сервиса является дополнительным уровнем в приложении ASP.NET MVC, которое обеспечивает связь между контроллером и уровнем репозитория.

Уровень сервиса содержит логику проверки бизнеса.

Например, уровень сервиса продукта имеет метод CreateProduct().

Метод CreateProduct() вызывает метод ValidateProduct() для проверки нового продукта перед передачей продукта в репозиторий продукта.

Источник: http://www.asp.net/mvc/overview/older-versions-1/models-data/validating-with-a-service-layer-cs