2017-07-29 248 views
0

此刻我正試圖理解依賴注入。比方說,我有以下類:Pojo類的依賴注入

專輯

public class Album { 
    private String id; 
    private String name; 
    private String cover; 
    private Artist artist; 
} 

public class Song { 
    private String id; 
    private String title; 
    private Artist artist; 
    private Album album; 
} 

藝術家

public class Artist { 
    private String id; 
    private String name; 
} 

所以Song取決於AlbumArtistAlbum取決於Artist。比方說,我從數據庫中獲取所有請求的字段。目前所有成員都通過構造函數傳入。通常我會多次創建相同的專輯對象(在同一專輯的每首歌曲的循環中)。這是可以通過依賴注入避免的東西嗎?

我該如何用Dagger2做到這一點?關於這一點我並沒有真正理解。這只是「將構造函數」移出課程嗎?

回答

4

如果你使用Dagger創建你的模型類,你肯定是做錯了什麼。

理論上這是可能的,當然。你仍然需要一個循環,但是現在你將創​​建你的組件並傳遞參數,以便它們可以分別創建它們的Artist,它們的Album和它們的Song。一個ArtistComponent,它提供其ArtistAlbumComponent

最後你仍然有一個循環,但這次只是創建組件來創建你需要的對象。您在這裏獲得的唯一一件事是開銷很大,而且比以前更多的對象創建。所以不,請不要在這裏使用Dagger。


依賴注入旨在將您的業務邏輯鏈接在一起。如果您有從數據庫中讀取的ArtistDao,則可能還有一個要求所述DAO工作的ArtistPresenter。 ArtistDao仍然讀取並創建藝術家(數據模型),但您可以使用Dagger創建DAO並將其傳遞給演示者。

這只是「移動構造函數」出類嗎?

匕首不會奇蹟般地創建對象。如果你有一個依賴項,你仍然在你的構造函數中聲明這個依賴項。 Dagger會爲你調用正確的參數,構造函數爲,並且可能會保留創建的對象以備後用(範圍)。

依賴框架旨在減少樣板,創建一個對象,將其傳遞給下一個對象等等。它們將解決您的依賴關係,並將它們保留。