Beim Schreiben von ASP.NET war mir in den letzten zwei Tagen schwindelig, und ich möchte immer faul sein. Da fast jede Methode im Hintergrundcode try..catch erfordert, fühlt es sich sehr umständlich an. Es erinnert mich auch an AOP, aber die Methode von AOP ist relativ kompliziert und es gibt viele Methoden. Verwenden Sie beispielsweise Dynamic Proxy, Attribute oder Emit usw. Ich dachte plötzlich an die neue Funktion von C# 2.0, die anonyme Delegation, und fand sie etwas hässlich. . . Tatsächlich können Sie die Wirkung von AOP jedoch auch einfach auf relativ einfache Weise simulieren:
// Die Anforderung, eine Seitenbasisklasse in asp.net zu erzwingen, ist nicht übermäßig. . .
öffentliche Teilklasse TestLogger: PageBase {
protected void Page_Load(object sender, EventArgs e) {
// Diese Methode ist in der Seitenbasisklasse implementiert und kann darin allgemeine Ausnahmebehandlung, Protokollierungslogik usw. implementieren.
TryDo(
// Hier werden die eigentlichen Dinge erledigt
Delegate() {
int a = 1;
int b = 0;
int c = a / b;
},
// Dies ist eine optionale Ausnahmebehandlung. Wenn Sie null übergeben, wird die Ausnahme einfach ignoriert.
Delegate() {
Response.Write("Leider ist ein Fehler aufgetreten.");
}
);
}
}
Der Implementierungscode in der Seitenbasisklasse ist sehr einfach und kann auch einfach und einheitlich verwaltet werden. Hier gehe ich davon aus, dass ich einfach log4net verwende, um Ausnahmen zu protokollieren:
Verwenden des Systems;
mit System.Web.UI;
mit log4net;
Namespace SomeNamespace {
//Definieren Sie einen einfachen Delegaten für die Übergabe anonymer Delegaten
öffentlicher Delegat void MyAction();
//Seitenbasisklasse definieren
öffentliche Klasse PageBase: Seite {
protected ILog logger;
// Die gesamte Ausnahmebehandlungslogik wird zentral in der Seitenbasisklasse verwaltet.
protected void TryDo(MyAction doHandler, MyAction außerHandler) {
versuchen {
// Mach etwas Praktisches
doHandler();
} Catch (Ausnahme ex) {
//Einfache Ausnahmeprotokollierung
logger.Error(ex);
// Eine andere Verarbeitung
// . . .
// Rufen Sie die benutzerdefinierte Ausnahmebehandlung auf. Hier werden keine spezifischen Ausnahmeinformationen zurückgegeben. Weil es ohnehin nicht nötig ist, es dem Benutzer zu zeigen. . .
if (exclusiveHandler != null)
außerHandler();
}
}
protected override void OnInit(EventArgs e) {
// Logger initialisieren. GetType() kann hier den tatsächlichen Typ der Unterklasse abrufen
logger = LogManager.GetLogger(this.GetType());
base.OnInit(e);
}
}
}
Okay, lasst uns hier aufhören zu schreiben. Das ist nur eine einfache Idee von mir. Der Zweck besteht darin, eine zentralisierte Verwaltung von Ausnahmen oder Protokollen auf einfache Weise zu implementieren. Natürlich ist dies nicht mit dem vollständigen AOP-Konzept vergleichbar, aber es scheint, dass es derzeit in .NET kein perfektes AOP-Framework gibt.
http://www.cnblogs.com/RChen/archive/2006/11/16/aspnet_Exception_handling.html