при вызове услуги с изменением состояния, например,
void SaveCustomer(Customer customer)
может произойти следующее
- параметры недействительны
- возникает исключение
- авторизация не удалась
- бизнес-правила нарушены
- все в порядке
Для условий 1-3 я думаю, что служба должна вернуть соответствующуюисключение Для # 4 я также думаю, что служба должна возвращать исключение, но некоторые полагают, что она должна возвращать объект, который отражает успех или нет вызова (объект ответа).
В нашем случае нарушение бизнес-правилавозможность для конечного пользователя выбрать альтернативное действие.Я думаю, что пользовательское исключение, которое перечисляет коды ошибок, может быть проанализировано клиентом и локализовано.Объект ответа может сделать то же самое, но более строго типизированным способом.
С объектом ответа нам нужно обработать путь обратно по стеку к службе (если (хорошо) и т. Д.), И мы можем 'не полагайтесь на исключение, отменяющее транзакцию.
Является ли какой-либо из этих вариантов антипаттерном?