Did*_*xis 5 .net c# xml oop repository
对于基于xml的存储库,什么是更好的方法:
1)每次调用存储库时保存对底层xml文档的更改...
public class XmlRepository1
{
private XDocument xDocument;
public void CrudOp()
{
// Perform CRUD operation...
// Call Save()
xDocument.Save(path);
}
}
Run Code Online (Sandbox Code Playgroud)
要么
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我的倾向倾向于选项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);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
893 次 |
最近记录: |