2012-04-02 68 views
2

我對如何將一個簡單的類如Person存儲在Xml文件中存在一些疑問。我應該實施一個存儲庫和xml服務嗎?

根據我的知識,我必須首先創建包含如GetPersons()SavePersons(IEnumerable<Person> persons)等功能的Xml服務。

而且我的存儲庫應該包含類似於可能的查詢,AddRemove也。我真的想要有人解釋我該如何開始實施這兩件事情?想法的主要想法是將其存儲在xml文件中並從存儲庫中獲取一些查詢。

+0

當你說XML服務,你的意思是使用XML的Web服務?如果是這樣,是否有任何理由需要將數據存儲在XML中,或者您可以使用數據庫? – 2012-04-02 15:37:05

+1

不,我不是指一個Web服務,它只是一個類的名稱,如何負責訪問數據。這就是全部 – 2012-04-02 15:39:57

回答

1

存儲庫模式背後的想法是,您隱藏數據存儲的細節。所以,你的版本庫的用戶只會看到類似方法的接口:

public interface IPersonRepository 
{ 
    void Add(Person person); 
    void Remove(Person person); 

    void GetById(int personId); 
} 

如果你想使用XML作爲數據存儲,你應該創建一個XmlPersonRepository實現了IPersonRepository接口。在這些方法的內部,您可以使用.NET類直接訪問XML文件,或者您可以將XML數據加載到DataSet中,並以更關係的方式訪問它。

如果您有多個存儲庫,您會怎麼做?一個用於人員,一個用於產品,一個用於訂單。如果您希望跨越這三個存儲庫的單個事務並將更改保存在一個塊中,則還需要另一個模式。 UnitOfWork。

Patterns of Enterprise Archicture定義的UnitOfWork爲:

維護受商業交易和 對象的座標列表寫出來的變化和 併發性問題的解決。

+0

我在想,實現IPersonRepository的類應該在其構造函數中知道類似IDataService的內容(如果我喜歡將其存儲在數據庫或Xml文件中) – 2012-04-02 15:43:57

+0

我不會這麼做。那麼你的Repository只會成爲實際工作的類的包裝。如果您的存儲庫的目的是封裝您的數據存儲,爲什麼要添加更多間接層? – 2012-04-02 19:10:28

+0

還有一個疑問,所以當我必須獲取一些數據時,我從哪裏獲得這些數據?從一個變量(加載之前的數據)或從訪問數據。 – 2012-04-02 21:12:23

相關問題