2012-06-09 152 views
0
public class CarRepository:IC 
{ 
    public IRD ReferenceDataRepositry{get;set;} 
    public string SaveCar(Car car) 
    { 
     //get data from reference data repository 
    } 
} 

public class ReferenceDataRepository:IRD 
{ 
    public string Get(string id) 
    { 

    } 

} 

將數據保存到存儲庫時,我想從參考數據存儲庫中獲取數據以設置某些屬性。存儲庫模式混淆

問題是一個倉庫應該知道其他倉庫嗎? 我正在使用依賴注入來設置參考數據存儲庫,我應該在存儲庫內設置存儲庫嗎?

回答

0

你可以,那裏DI只是聲明一個對象依賴於另一個,但不負責實例化依賴。

但是我會將閱讀回購注入寫回購。讀寫就是這樣。獲取對象並保存對象。仍然有實際改變目標的責任。這會發生在另一個組件中。如控制器操作或服務門面。

0

我相信存儲庫不應該彼此瞭解。這種額外行爲屬於您的服務或業務層。

存儲庫模式就是將您的數據訪問層與業務層分離,並通過耦合不同的存儲庫讓您的業務邏輯滑入數據層,這違背了使用此設計模式的初衷。

Btw。將正在改變數據的方法與正在讀取數據的方法分開是一種很好的做法。

0

Repository模式如所述by Microsoft爲約邏輯的封裝和 如何檢索數據並將其映射到從作用於模型中的 業務邏輯實體模型中的邏輯分離。

應該沒有必要混淆不同的邏輯,每個存儲庫封裝一個。

但是,如果您需要類似的東西,您可以編寫一個RepositoryManager類, ,它處理不同存儲庫之間的糾纏。

0

我爲特定的上下文保留獨立的存儲庫。雖然查詢存儲庫只是讀取,但它通常用於UI。一個寫入庫,也有一些讀取,但有讀取服務域。

public interface DomainRepository 
{ 
Entity Get(int id); 
bool VerifySomeAspect(); 
Save(Entity data); 
} 

請看這裏如何DomainRepository功能讀取和寫入。作爲一個原則,如果它服務於不同的目的,我不會因爲另一個存儲庫而退縮。

事件如果讓一些方法將被重複,然後我使它內部和靜態,傳遞它所需的所有參數,但我不會注入另一個回購。如果每個存儲庫都有明確的責任並且只提供一個上下文,那麼可能95%的情況下您不需要這樣做。

這也意味着不要使用通用的存儲庫。根據圖層/上下文需求設計每個回購,並且不要介紹'我應該儘可能多地使用'的陷阱。在這種情況下,重用是好的,但很棘手。