我有一個對象:庫存儲庫模式的域模型
一個庫可以有多個Books,CD和Papers。除具有Address屬性的Library類外,每個類都有Id,Name和Price屬性。
我想創建Repository模式來抽象上面的圖層存儲數據的位置。現在,數據存儲在xml文件中。
<library>
<books></books>
<cds></cds>
<papers></papers
</library>
後來我們考慮將它存儲在數據庫中。然後,我們將有一個圖書館的桌子,一本書桌,一張CD桌子和一張紙桌子。
用戶在屏幕上創建庫對象,然後在屏幕上創建書籍,CD和紙張。
然後他點擊保存。在這一點上,我想把新創建的庫對象保存爲XML,所以我想要有Repository和使用依賴注入,我將在上面的層中注入一個xml存儲庫的實現,以便將數據存儲到正確的位置。我可以序列化Library對象並獲取xml並調用簡單的Save方法來保存庫對象。
但想象一下,我將XMLRepository替換爲DatabaseRepository。
在這種情況下,我希望上面的其餘層保持不變。我希望LibraryRepository.Save()會關心它是否需要進入XML或CSV或DB。 我很困惑我將如何創建一個Repository模式來解決LibraryRepository.Save()方法。
大家都在說Repository類應該有單一的責任。 它應該只保存一個對象類型,不應該帶一個對象,取其相關的類並保存它們。每個類都應該有它自己的Repository類。
另外每個庫對象都有多個Books對象。我不想使用for循環並遍歷LibraryRepository.Save方法中的每本書。
我不知道如何創建我的域模型並調用Library Save()方法。
請指導。
看看這篇文章從MSDN領域驅動設計http://msdn.microsoft.com/en -us /雜誌/ dd419654.aspx。文章討論了很多這些問題,並鏈接到其他相關信息。您不應爲每個對象創建一個存儲庫,而應爲每個「聚合」創建一個存儲庫。構成邏輯實體的對象組。 –
我認爲使用一些ORM會更好。您可以隨時更改基礎數據提供者。例如,NHiberante可以將數據存儲在CSV文件中(檢查此問題http://stackoverflow.com/questions/680994/can-nhibernate-persist-to-flat-files-instead-of-database)。 –