XML存储库; 保存()或不保存()

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提供了"类似批处理"的范例,我可以看到它因各种原因而更加灵活.

Ale*_*kov 3

考虑添加某种事务支持(接近您的第二个方法)。

  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)