У меня есть следующий метод:Не бросать бизнес исключений, но возвращение значения
public void Foo addFoo(String name);
Этот метод добавляет Foo
к некоторой структуре. В то же время он проверяет, существуют ли Foo
по дате name
. Я могу бросить FooNameConflictException
, но я бы этого не сделал, так как я не рассматриваю это как исключение - это то, что может произойти, и оно является частью бизнес-потока приложения.
Вместо этого, я бы вернул информацию, если Foo
по названию уже существует. Каков прагматичный способ сделать это? Что я должен вернуть, если имя уже существует?
Возвращение
null
- и это чистая уродлив, какnull
не означает ничего, и это не является расширяемым и ... некрасиво.Foo
с некоторым внутренним статусом, что указывает на то, чтоFoo
является НОВЫМ или СУЩЕСТВУЮЩИМ. Тем не менее, мы должны тщательно сконструировать изменение состояния из NEW -> СУЩЕСТВУЮЩЕГО, т.е. я не уверен, когда это произойдет, и может не работать в многопоточных средах.сделать новый класс
FooOperation
илиFooAdding
, которые составляют изFoo
экземпляра и дополнительного флага (ов), который приносит больше информации о процессе добавления.Я могу пойти с общим вариантом №3 и иметь класс
Either
, но тогда вы привязаны к двум значениям (слева или справа).
Я вижу решение № 3 как единственное прагматическое в этом случае. Я что-то упускаю?
На первый взгляд это звучит как этот метод беря на себя более чем одну ответственность и должны быть развязаны на различные обязанности. – Makoto
Зачем вам нужно знать, что значение 'Foo' для' name' было добавлено вместо повторного использования вне метода 'addFoo'? Вы также говорите, что конфликт - это то, что может произойти в нормальном бизнес-процессе, как вы справляетесь с этим делом? – Jean
Вы глотаете свои исключения? –