我有以下方法:不扔業務異常,但返回值
public void Foo addFoo(String name);
這種方法增加了Foo
一些結構。在同一時間,它檢查Foo
給定的name
是否已經存在。我可以拋出一些FooNameConflictException
,但我不會,因爲我不認爲這是例外情況 - 這可能會發生,並且它是應用程序業務流程的一部分。
相反,如果Foo
已經存在,我會返回信息。做這件事的實用方法是什麼?如果名稱已經存在,應該返回什麼?
返回
null
- 這是純粹的醜陋null
並不意味着什麼,這是不可擴展和......醜。返回
Foo
帶有一些內部狀態,表明Foo
是NEW或EXISTING。但是,我們必須仔細設計從NEW - > EXISTING的狀態更改,即我不確定何時會發生這種情況,並且可能會在多線程環境中失敗。結交新類
FooOperation
或FooAdding
了組成Foo
實例和附加的旗(縣),其帶來的添加過程的更多信息。我可能會使用#3的通用變體,並且擁有像
Either
這樣的類,但是這樣就會綁定到兩個值(左側或右側)。
我看到解決方案#3作爲唯一的實用在這種情況下。我錯過了什麼嗎?
乍一看這聽起來像這種方法承擔不止一項責任,並應分解成不同的責任。 – Makoto
爲什麼你需要知道'name'的'Foo'值已被添加,而不是在'addFoo'方法之外重用?你還說衝突是在正常的業務流程中可能發生的事情,你們的業務如何處理這種情況? – Jean
你吞嚥你的例外嗎? –