Репозиторий XML; Сохранить () или нет () - PullRequest
5 голосов
/ 15 ноября 2011

Что будет лучшим подходом для репозитория на основе 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 предоставляет «пакетную» парадигму, которую я считаю более гибкой по ряду причин.

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Подумайте о добавлении какой-либо поддержки транзакций (рядом со вторым приложением).

  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); 
    }
  }
1 голос
/ 15 ноября 2011

Я предпочитаю использовать отдельный метод Save в репозитории, чтобы иметь возможность отменить мои изменения, если что-то пойдет не так.

Я нашел эту статью Хранилища и метод сохранения . Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...