我对如何将一个简单的类如Person
存储在Xml文件中存在一些疑问。我应该实施一个存储库和xml服务吗?
根据我的知识,我必须首先创建包含如GetPersons()
和SavePersons(IEnumerable<Person> persons)
等功能的Xml服务。
而且我的存储库应该包含类似于可能的查询,Add
和Remove
也。我真的想要有人解释我该如何开始实施这两件事情?想法的主要想法是将其存储在xml文件中并从存储库中获取一些查询。
我对如何将一个简单的类如Person
存储在Xml文件中存在一些疑问。我应该实施一个存储库和xml服务吗?
根据我的知识,我必须首先创建包含如GetPersons()
和SavePersons(IEnumerable<Person> persons)
等功能的Xml服务。
而且我的存储库应该包含类似于可能的查询,Add
和Remove
也。我真的想要有人解释我该如何开始实施这两件事情?想法的主要想法是将其存储在xml文件中并从存储库中获取一些查询。
存储库模式背后的想法是,您隐藏数据存储的细节。所以,你的版本库的用户只会看到类似方法的接口:
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为:
维护受商业交易和 对象的坐标列表写出来的变化和 并发性问题的解决。
我在想,实现IPersonRepository的类应该在其构造函数中知道类似IDataService的内容(如果我喜欢将其存储在数据库或Xml文件中) – 2012-04-02 15:43:57
我不会这么做。那么你的Repository只会成为实际工作的类的包装。如果您的存储库的目的是封装您的数据存储,为什么要添加更多间接层? – 2012-04-02 19:10:28
还有一个疑问,所以当我必须获取一些数据时,我从哪里获得这些数据?从一个变量(加载之前的数据)或从访问数据。 – 2012-04-02 21:12:23
当你说XML服务,你的意思是使用XML的Web服务?如果是这样,是否有任何理由需要将数据存储在XML中,或者您可以使用数据库? – 2012-04-02 15:37:05
不,我不是指一个Web服务,它只是一个类的名称,如何负责访问数据。这就是全部 – 2012-04-02 15:39:57