2012-04-02 67 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

相关问题