XML存储库;是否保存()
本文关键字:保存 是否 存储 XML | 更新日期: 2023-09-27 18:14:48
对于基于xml的存储库,什么是更好的方法:
1)在每次调用存储库时保存对底层xml文档的更改…
public class XmlRepository1
{
private XDocument xDocument;
public void CrudOp()
{
// Perform CRUD operation...
// Call Save()
xDocument.Save(path);
}
}
或
2)为最终用户提供SaveChanges()方法…
public class XmlRepository2
{
private XDocument xDocument;
public void CrudOp()
{
// Perform CRUD operation...
// DON'T call save
}
// Provide a SaveChanges() method to the end-user...
public void SaveChanges()
{
xDocument.Save(path);
}
}
我倾向于选项1,因为提供SaveChanges()方法看起来并不是存储库的责任。然而,出于以下几个原因,我对这个决定进行了质疑:
a)在多线程环境中,如果对存储库的调用失败,从而使对象处于部分突变状态,这为最终用户提供了一种回滚更改的简单方法。
b)选项2提供了一个"批处理"范例,我认为由于各种原因,它更灵活。
考虑添加某种事务支持(接近第二种方法)。
public class XmlRepository2
{
public void CrudOp()
{
// DON'T call save
}
public MakeTransacedChanges(Action<XmlRepository2> makeChanges)
{
try{
makeChanges(this);
saveChanges();
}
catch (RepositoryException e)
{
//revert changes
}
}
private void saveChanges()
{
xDocument.Save(path);
}
}
我更喜欢在存储库中有单独的保存方法,以便在出现问题时有机会恢复我的更改。
我找到了这篇文章知识库和保存方法。