Rückgängig - Ich rufe eine Drittanbieter-Assembly auf, die Operationen zum Rückgängigmachen unterstützt. Es erfordert Anrufer, einen Rückgängig-Kontext zu erstellen, einige Methoden in der Assembly aufzurufen, und dann den Undo-Kontext zu zerstören. Kontexte können verschachtelt werden. Wenn ein Kontext erstellt wird, aber in einem unerwünschten Zustand verbleibt, der einen App-Neustart erfordert.
Normalerweise rückgängig verwenden ich so etwas wie dieses
void foo()
{
int id = lib.create_undo_context();
try
{
lib.performsomeaction();
lib.performsomeaction();
lib.performsomeaction();
}
finally
{
lib.destroy_undo_context(id);
}
}
mit Postsharp schreiben würde ich ein Attribut namens [Rückgängig], die definieren, erstellt die Undo-Kontext, wenn die Methode beginnt und zerstört es, wenn das Verfahren beendet (auch wenn eine Ausnahme ausgelöst) - so sieht der Code wie diese
[Undo]
void foo()
{
lib.performsomeaction();
lib.performsomeaction();
lib.performsomeaction();
}
Es ist ein wenig komplizierter, diese zu implementieren, als ich zeigen werde, weil ich sicherstellen, daß alle rückgängig machen Kontexte selbst in Fällen, gereinigt, wo es verschachtelt Undo Kontexte - aber du bekomme eine Vorstellung.
AOP ist fehleranfällig, da keine Änderungen lokalisiert werden. Es sind im Grunde Annotationen ohne Annotation (auch unsichtbare Annotationen). Siehe auch https://pp.info.uni-karlsruhe.de/uploads/publikationen/constantinides04eiwas.pdf – Pacerier
@Pacerier: Ihre Aussage ist falsch. Ich verwende AOP seit Jahren, um Fehler zu vermeiden und Refactoring und Debugging zu vereinfachen. Der gesamte cross-cutende Code, der in OOP mit der gesamten Codebasis verwoben ist, ist ordentlich modularisiert und somit leicht in AOP zu lokalisieren. Core-Code ist einfacher zu lesen und zu pflegen. Aussagen wie die Ihre werden meistens von Leuten gehört, die das Konzept von AOP nicht verstanden und es nicht ausgiebig benutzt haben (außer Geben ist ein kurzer Versuch, der einfach nicht genug ist). – kriegaex
@kriegaex, Wann genau das Konzept von AOP gekommen ist. – Ali786