我一直在嘗試學習服務層和存儲庫模式是如何工作的。到目前爲止,我已經寫了一個服務層和一個簡單的存儲庫模式接口。但是,我經常看到一些文章指出,存儲庫模式允許在不消耗代碼的情況下更換不同的數據存儲庫。使用存儲庫模式提供對不同數據存儲的訪問
在我的情況下,我希望能夠支持讀取和寫入應用程序數據到CSV和/或XML文件。這是我不明白如何正確使用存儲庫模式實現這一點的部分。我應該每個數據存儲都有一個存儲庫嗎?
ProductCsvRepository : IProductRepository
ProductXmlRepository : IProductRepository
但是如果我這樣做,那麼服務層必須知道底層數據存儲,打破了能夠方便地換入或換出不同的數據存儲的想法。
然後我必須有一個看起來像這樣的服務層嗎?
private readonly IProductXmlRepository _productXmlRepository;
private readonly IProductCsvRepository _productCsvRepository;
public ProductService()
{
_productXmlRepository = new IProductXmlRepository();
_productCsvRepository = new IProductCsvRepository();
}
public ICollection<Product> GetAllXml()
{
return _productXmlRepository.GetAllCsv();
}
public ICollection<Product> GetAll()
{
return _productCsvRepository.GetAllXml();
}
這就提出了兩個問題:
- 這無疑打破然後消費代碼需要知道數據存儲是個什麼概念呢?
- 在使用代碼確實需要了解數據存儲的情況下,如「文件>導出爲」類型功能的情況如何呢?導出功能實際上應該是使用適當的CSV或XML服務的不同服務嗎?
我想我很不明白如何正確實現存儲庫模式和服務層。我應該如何設計存儲庫模板和服務層?
你的服務的構造函數應該接受一個'IProductRepository'。現在你的服務對象將由'ProductCsvRepository'或'ProductXmlRepository'構成。在運行時,您可以發送兩者中的任意一個來執行「IProductRepository」操作。 – singsuyash