Ich habe eine Klasse mit etwa 20 Eigenschaften, aber ich würde sie für diese Frage vereinfachen:
public class Produkt
{
public int Id { get; set; }
public string Name { get; set; }
}
Ich möchte eine Klasse oder Eigenschaft haben, die identifiziert, ob meine Klasse "dirty" ist. Damit meine ich, ob sich eines ihrer Werte geändert hat?
Es gibt 3 Designansätze, die ich verfolgen kann:
1) Beim Setzen der Eigenschaft innerhalb der Klasse überprüfe ich, ob die Eigenschaft IsDirty ist.
public string Name
{
get { return this._name; }
set { if (this._name != value) { this.IsDirty = true; this._name = value; }
}
2) Beim Setzen der Eigenschaft von außerhalb der Klasse überprüfe ich, ob die Eigenschaft IsDirty ist.
z.B.
if (p.Name != newName)
{
p.IsDirty = true;
p.Name = newName;
}
Dieser Ansatz zwingt mich, viele if-Abfragen in der Client-Klasse hinzuzufügen. Einige Eigenschaften sind sogar Sammlungen oder Referenzobjekte, so dass die Anzahl der Zeilen sogar erhöht werden würde.
3) Wenn das Objekt bereit ist, gespeichert zu werden, überprüfe ich, ob irgendwelche Eigenschaften IsDirty sind, indem ich ein geklontes Objekt hole und die Gleichheit überprüfe.
Dies hätte eine schlechtere Leistung, da ich das Originalobjekt klonen oder erneut laden müsste und dann die Eigenschaften nacheinander vergleichen müsste.
Welches ist das beste Design? Oder gibt es ein anderes Designmuster, das dabei helfen kann?