2017-09-15 65 views
2

在MVC模式中,我們正在開發一個REST應用程序。在控制層寫入決策語句

服務層正在返回Optional<T>其中T可以是任何類。

RESTController層有條件語句,測試結果是否爲Optional.empty然後返回[]否則返回實際數據。

return ABCService.getById("").map(send actual data).orElse(Collections.empty()); 

把這段代碼寫在控制層上是不好的做法?因爲我們不想返回null。如果我們不在控制層使用這個條件,我們必須從服務層中刪除Optional,我認爲這不是一個好習慣。

有人可以請解釋爲什麼添加上面的代碼不是一個好的做法,會有什麼後果?

+0

「DO DO SOMETHING」和「DO SOMETHING ELSE」是* values *,它與'map'和'orElse'的意圖相符,而它們的內容暗示你實際描述了一個動作。 – Holger

+2

如果代碼不是表示邏輯,那麼這是不好的做法,因此應該不在控制器中。如果代碼是表示邏輯,並且應該在控制器中,那麼這是很好的做法。所以這一切都取決於做些什麼和做些什麼實際上是。 –

+0

更新了我的問題。 –

回答

1

控制器負責以他們應該提供的格式表示數據。他們不處理原始數據(像通常由服務處理的讀取/更新操作),他們只是告訴這些數據應該如何。

因此,認爲.map(send actual data)沒有做任何與業務邏輯層相關的任何事情,您的代碼片段是可以接受的。

剩下的另一個問題是如何正確編寫處理該案例的方法。根據「清潔代碼」,我建議寫兩種方法(分別爲空和非空數據)。

+1

有幫助嗎?如果還有問題,你可以自由詢問:) – Andrew

+0

是的,有很多問題.. https://softwareengineering.stackexchange.com/questions/357565/writing-decision-statement-on-control-layer我問過這個問題這裏的問題..N人說話,我正在努力返回**可選 ** ..是真的嗎? 有什麼我可以做我的API根據標準? –