lo que sería un mejor enfoque para un repositorio basado en xml:XML Repository; a Save() o no guardar()
1) Guardar los cambios en el documento XML subyacente en cada llamada al repositorio ...
public class XmlRepository1
{
private XDocument xDocument;
public void CrudOp()
{
// Perform CRUD operation...
// Call Save()
xDocument.Save(path);
}
}
o
2) Proporcionar al usuario final con un método 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);
}
}
Mi inclinación se inclina hacia la opción 1, porque proporcionar un método SaveChanges() realmente no parece una responsabilidad de los repositorios. Sin embargo, estoy cuestionando esta decisión por un par de razones:
a) En un entorno de subprocesos múltiples, esto le brinda al usuario final una manera fácil de deshacer los cambios si falla una llamada al repositorio , dejando objetos en un estado parcialmente mutado.
b) La opción 2 proporciona un paradigma "por lotes", que puedo ver como más flexible por diversas razones.
Como comentario a (a), nunca debe dejar su repositorio en un estado parcialmente mutado, sin importar lo que haya sucedido. –
@Matthew -Déjame aclarar ... El repositorio no dejará objetos parcialmente mutados. Pero si un usuario final cambia el estado de un objeto, llama a Repository.Update (obj) y la llamada falla ... (¿Ve a dónde voy con esto?) Podría ser demasiado paranoico aquí, realmente no lo hago 't saber ... – Didaxis