|
|
Pubblicato su 18/04/2017 14:54:11
|
|
|

Iniziamo con un semplice pezzo di codice:
Quindi, supponiamo che sia un programma web, vogliamo prima controllare la sessione, poi controllare i permessi, avviare una transazione, scrivere un log, poi eseguire l'operazione vera e poi scrivere un log. Ovviamente, non possiamo scrivere tutte le chiamate ai metodi delle operazioni sopra in DoSomething(), quindi il codice diventerebbe un grosso pezzo di schifezza, quindi cosa dovremmo fare?
Ci sono molti modi per implementarlo, come l'uso di framework come Spring, ma nei progetti reali non è possibile introdurre un framework in modo casuale, e spesso dobbiamo scrivere alcuni meccanismi da soli.
Qui penso al Filter in MVC, finché metti un tag attributo sul Controller o sull'Azione, puoi fare altre cose prima e dopo l'esecuzione del metodo. Quindi simuliamo semplicemente un'implementazione di filtro.
Innanzitutto, il metodo originale si trasforma in un elegante modo di etichettare le caratteristiche:
Con i feature tag, devono esserci classi corrispondenti ai feature tag, così come implementazioni AOP, che possono essere contenute indipendentemente in un file o assembly.
Per prima cosa, l'etichetta allegata al metodo, implementata come vuoto:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] classe pubblica sigillata MyInterceptorMethodAttribute : Attribute { } Dopodiché, definisci l'etichetta da associare alla classe:
Ecco una classe MyAopHandler definita, implementata come segue:
Si noti che la parte specifica dell'operazione del codice sopra è equivalente a una "classe proxy", che in sostanza cambia il contesto dell'esecuzione del metodo. Le strutture di programma orientate agli oggetti, come i delegati, possono essere utilizzate per esporre l'implementazione specifica al mondo esterno per uno sviluppo secondario. |
Precedente:ES5, ES6, ES2016, ES. Prossimo: Cosa succede con la versione di Javascrip{filter}t?Prossimo:Tutorial per iniziare PowerShell - versione v0.3
|