Ich habe soeben einen Fehler in einem Framework behoben, das ich entwickle. Der Pseudo-Pseudocode sieht wie folgt aus:
myoldObject = new MyObject { someValue = "old value" };
cache.Insert("myObjectKey", myoldObject);
myNewObject = cache.Get("myObjectKey");
myNewObject.someValue = "new value";
if(myObject.someValue != cache.Get("myObjectKey").someValue)
myObject.SaveToDatabase();
Im Wesentlichen habe ich also ein Objekt aus dem Cache geholt und dann später das ursprüngliche Objekt mit dem zwischengespeicherten Objekt verglichen, um festzustellen, ob ich es in der Datenbank speichern muss, falls es sich geändert hat. Das Problem entstand, weil das ursprüngliche Objekt ein Verweis ist... so dass das Ändern von someValue auch das referenzierte Cache-Objekt änderte, so dass es nie wieder in der Datenbank gespeichert wurde. Ich habe das Problem behoben, indem ich das Objekt aus der zwischengespeicherten Version geklont habe, wodurch der Verweis getrennt wurde und ich das neue Objekt mit dem zwischengespeicherten vergleichen konnte.
Meine Frage ist: Gibt es eine bessere Methode, ein Muster, das Sie empfehlen können? Ich kann nicht die einzige Person sein, die das schon mal gemacht hat :)