В чем разница между бизнес-объектом и бизнес-логикой - PullRequest
5 голосов
/ 19 марта 2012

Я пытаюсь структурировать свое приложение WPF MVVM в соответствии с лучшими практиками. Я должен начать с большого количества существующего кода, поэтому у меня нет возможности сразу решить все структурные недостатки. Мне нравится следующая структура решения.

http://www.paulspatterson.com/technology/dot-net-development/mvvm-and-wpf-for-vb-net-series-2-part-1-again/

Это разделяет решение на следующие проекты; BusinessLogic, BusinessObjects, Infrastructure (общие утилиты многократного использования), оболочка WPF и модули (компоненты приложения, которые нужно внедрить с помощью контейнера IOC).

Я понимаю, что бизнес-объект представляет сущность человеческого мира, тогда как бизнес-логика - это детали реализации, как обсуждалось в этом вопросе.

Что такое бизнес-объекты и что такое бизнес-логика?

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

Возьмите следующий чрезвычайно упрощенный код:

public class Chart
{

    private SizeChart _activeChartSize = new SizeChart();

    public void Draw() {
        //  Size the chart object
        _activeChartSize.Size(this);
        //  Do other draw related things
    }

}

public class SizeChart
{

    public void Size(Chart chartToSize) {
        //  Manipulate the chart object size
    }

}

В контексте структуры решения MVVM, описанной выше (по крайней мере, на мой взгляд), класс SizeChart будет бизнес-логикой, а класс Chart будет бизнес-объектом, но размещение их в разных проектах будет циклической зависимостью. Является ли бизнес-логика класса SizeChart бизнес-объектом и где должен находиться класс SizeChart в структуре решения, если я приму эту предложенную структуру решения MVVM?

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

Ответы [ 3 ]

3 голосов
/ 20 марта 2012

http://en.wikipedia.org/wiki/Business_object

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

http://en.wikipedia.org/wiki/Business_logic_layer

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

Таким образом, в основном бизнес-объект моделирует объект (обычно объект реального мира, такой какСотрудник или Учетная запись), тогда как бизнес-логика облегчает взаимодействие между бизнес-объектами и между другими прикладными уровнями.

Я думаю, что наиболее подходящий ответ дал Даниэль Хилгарт .Он ответил, что не отделяет бизнес-логику от ее объектов, потому что это приводит к модели анемичной области .

. Хотя я думаю, что следующая структура решения WPF MVVM, предложенная Полом С. Паттерсоном,хороший, я не думаю, что это подходит для всех.

http://www.paulspatterson.com/technology/dot-net-development/mvvm-and-wpf-for-vb-net-series-2-part-1-again/

Создание отдельных проектов бизнес-логики и бизнес-объектов, вероятно, работает лучше всего, если ваши бизнес-объекты объекты передачи данных (DTO) например, Linq to SQLчем более сложный объект, такой как композит, который может иметь более тесную связь с бизнес-логикой.

1 голос
/ 19 марта 2012

Недавно я столкнулся с чем-то похожим в проекте.

У нас есть веб-приложение, которое позволяет администратору создавать группы.Одним из обязательных правил было то, что нельзя создавать две группы с одинаковыми именами.В итоге мы создали очень простой объект, группу, а затем создали службу под названием GroupService.GroupService выполняет проверку правила, поэтому, когда пользователь вызывает GroupService.Save (Group), служба отключается и проверяет наличие предыдущих групп с именем.Если имя найдено, ошибка возвращается пользователю, а сохранение не происходит.

В нашем случае иерархия имеет Контроллер с Сервисами, Сервисы с Репозиториями, и Репозитории, наконец, фиксируются в базе данных.,В каждой из этих абстракций работает модель Group.Но наша модель - это не просто тупой объект.Он содержит логику проверки для самих полей данных и имеет совокупные свойства для упрощения привязки данных.

Расширяя это до концепции MVVM, я думаю, что модель представления будет иметь сервис, который содержит бизнес-логику и модель, которая должна была быть включена в представление.Очевидно, что View будет привязан к ViewModel, но ViewModel будет иметь некоторый экземпляр объекта Model для привязки.

1 голос
/ 19 марта 2012

Бизнес-объект - довольно аморфный термин - это DTO, POCO или их сочетание с какой-то бизнес-логикой?

Мне бы хотелось рассмотреть что-то другое - Chart и SizeChart оба являются элементами управления , а не "бизнес-объектами" или "бизнес-логикой". Дело не в том, что в них есть имена функций, которые звучат в пользовательском интерфейсе, а в том, что они на самом деле выполняют пользовательский интерфейс или визуализируют связанную работу (изменение размеров и рисование). Сбор данных, с которыми они работают, будет отдельным и будет назначен элементам управления до вызова Size или Draw.

Обратите внимание, что этот ответ не зависит от MVVM, поскольку он представляет собой нечто вроде красной сельди - ваш вопрос более тесно связан с общим n-уровневым дизайном, в который вы также включили MVVM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...