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