Điều gì sẽ là một cách tiếp cận tốt hơn cho một kho lưu trữ dựa trên XML:Kho lưu trữ XML; Lưu() hay không để Save()
1) Lưu thay đổi vào các tài liệu xml cơ bản trên mỗi cuộc gọi đến kho ...
public class XmlRepository1
{
private XDocument xDocument;
public void CrudOp()
{
// Perform CRUD operation...
// Call Save()
xDocument.Save(path);
}
}
hoặc
2) Cung cấp cho người dùng cuối với một phương pháp 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);
}
}
Độ nghiêng của tôi nghiêng về phía tùy chọn 1, vì việc cung cấp phương thức SaveChanges() không thực sự có vẻ giống như trách nhiệm kho lưu trữ. Tuy nhiên, tôi đang đoán quyết định thứ hai này vì một vài lý do:
a) Trong môi trường nhiều luồng, điều này mang lại cho người dùng cuối cách dễ dàng để quay lại thay đổi nếu cuộc gọi đến kho lưu trữ bị lỗi , để các vật thể ở trạng thái bị biến đổi một phần.
b) Tùy chọn 2 cung cấp một mô hình "giống hàng loạt", mà tôi có thể thấy là linh hoạt hơn vì nhiều lý do khác nhau.
Là một nhận xét cho (a), bạn không bao giờ nên rời khỏi kho lưu trữ của mình ở trạng thái đột biến một phần, bất kể điều gì đã xảy ra. –
@Matthew -Hãy để tôi làm rõ ... Kho lưu trữ sẽ không để các đối tượng bị đột biến một phần. Nhưng nếu người dùng cuối thay đổi trạng thái của một đối tượng, hãy gọi Repository.Update (obj) và cuộc gọi không thành công ... (bạn thấy tôi sẽ đi đâu với điều này?) Tôi có thể quá hoang tưởng ở đây, tôi thực sự không Không biết ... – Didaxis