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提供了一个"批处理"范例,我认为由于各种原因,它更灵活。

XML存储库;是否保存()

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

  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); 
    }
  }

我更喜欢在存储库中有单独的保存方法,以便在出现问题时有机会恢复我的更改。

我找到了这篇文章知识库和保存方法。