2017-04-03 46 views
3

我們是否需要爲域中的每個方法創建UseCases接口?Android Clean Architecture UseCase用於存儲庫的每種方法?

例如,假設我有這樣的倉庫接口

interface ThingRepository { 
    void create(Thing thing); 
    void delete(Thing thing); 
    List<Thing> readAll(); 
    int size(); 
} 

正如你可以看到有size()方法,在數據庫或文件返回的記錄數,等等。而且這種方法非常快。 我想這個方法不需要UseCase,因爲它不會阻塞UI線程並且可以同步執行。

所以,你可以解釋我,當你創建UseCase和當你不這樣做。基本上有UseCase創建任何規則?

對不起,如果在這個問題上有一些誤解。

在此先感謝;)

而且我開了Android的CleanArchitecture回購相同issue在GitHub上,但沒有人回答了這個問題還沒有,這就是爲什麼我問這裏。

+1

UseCases旨在表示高級別域邏輯,如「獲取用戶列表」。獲取用戶列表可能會從網絡或本地存儲庫或其他方法中獲取內容。您不希望它是與存儲庫的1對1映射,因爲存儲庫位於架構中的不同層上。域與數據之間的1對1映射將會破壞將它們分開的目的。 – drhr

+0

@drhr所以在我的情況下,你建議我不要創建UseCase? –

+0

@drhr「域與數據之間的1對1映射會破壞將它們分開的目的」我知道,在這種情況下,我猜MVP的用法更好,但是對於我的情況,您可以提出什麼建議? –

回答

1

有趣的問題!

簡單的答案。你作爲程序員不寫用例。您的specifications document是您從中派生您的用例的地方。一旦你的使用案例在你的看板上都排得很好,那麼你就開始解決這些問題。一次一個。

注意我說程序員?只有當你去工作,坐下時,老闆纔會給你一個規範,然後你編碼8小時,然後回家。但是,通常情況並非如此,我們中的一些人也是建築師。 (這是我下面點過於簡單化了。)

從你的原職的情況下,爲什麼大家在評論中你跳是因爲這個...

我們是否需要從領域層的Repository接口爲每個方法創建UseCases?

簡而言之:在測試驅動的開發中,在編寫一個失敗的測試之前,您不要編寫單個字符的代碼。用例驅動開發同樣如此;除非你有一個你正在試圖解決的用例,否則你不會編寫單一的代碼。

正如你可以看到有大小()方法,在>數據庫或文件返回的記錄數,等等。而且這種方法非常快。我猜想>這個方法不需要UseCase,因爲它不會阻塞UI>線程並且可以同步執行。

聽起來像什麼。 「我沒有一個用例來顯示數據庫中的記錄數量,所以我在存儲庫接口中添加了一個size()函數,因爲我認爲它應該有一個,並且我正在爲它編寫一個用例。「這根本就不是用例目標驅動的發展。

因此,所有這樣說,讓我們再回到size()功能在你的ThingRepository,唯一的原因,你應該添加了size()功能是解決使用案例

示例:「應用程序應在 數據庫中顯示所有Things的總數。

該用例的問題是,如果我向用戶顯示Things,那麼很有可能我的Presenter已將_ThingRepository注入到該用戶中。我寧願運行一個_ThingRepository.readAll().Count(),因爲它已經在內存中,或者需要在其他某個點上執行其他功能,這要比再次訪問數據庫(可能在另一個國家)簡單記錄要快得多計數。

如果你想首先要解決size()使用情況,您的看板可能是亂序,如「顯示的東西用戶」是Presenter功能和實現細節應推遲到最後一個負責時刻

那麼,size()函數是否真的需要在那裏呢?除非你有充分的理由把它放在那裏,而不是直到你需要它。

相關問題