Бизнес-логика на объектах с несколькими значениями - где поставить цикл? - PullRequest
2 голосов
/ 27 августа 2009

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

Варианты:

doBusinessLogic(things)

или

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

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

Пояснение:

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

Ответы [ 2 ]

1 голос
/ 27 августа 2009

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

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

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

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

0 голосов
/ 25 марта 2010

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

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

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

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

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

...