Бизнес-логика для объектов с несколькими значениями – где разместить цикл?

StackOverflow https://stackoverflow.com/questions/1337502

Вопрос

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

Варианты:

doBusinessLogic(things)

или

for (Thing thing : things) {
  doBusinessLogic(thing)
}

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

Уточнение:

Обработка нескольких типов исключений, возникающих из вызова бизнес-логики на уровне представления, требует большого объема кода, а также вызывает проблемы с обслуживанием (вводятся новые исключения, о которых уровень представления не знает).Кажется, лучше, чтобы вызов бизнес-логики обрабатывал ошибки в объектах с несколькими значениями и «упаковывал» их, чтобы представление могло обрабатывать их согласованным образом.

Это было полезно?

Решение

Как насчет чего-то вроде вашего последнего предложения:

for (businessObject : businessObjects) { businessObject.doBusinessLogic() }

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

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

Другие советы

В конечном итоге я выбрал первый вариант и создал облегченный универсальный класс «пакета результатов», который инкапсулирует успехи и неудачи действия над набором объектов.Успех или неудача привязаны к соответствующему идентификатору объекта.

Пакет заполняется внутри каждого вызова бизнес-логики и возвращается на уровень представления.Исключения, возникающие в цикле бизнес-логики «выполнение действия над объектом», перехватываются, и соответствующий сбой добавляется в пакет результатов (с привязкой к идентификатору объекта).

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

Это работает очень хорошо.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top