XML-репозиторий; в Save () или не в Save ()

Что было бы лучше для репозитория на основе 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) В многопоточной среде это дает конечному пользователю простой способ откатить изменения в случае сбоя вызова репозитория, оставляя объекты в частично мутированном состоянии.

б) Вариант 2 обеспечивает «пакетную» парадигму, которую я могу рассматривать как более гибкую по ряду причин.

5
задан Didaxis 15 November 2011 в 18:11
поделиться