Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 21364|Risposta: 1

[Fonte] .net/C# utilizza Attributes per implementare AOP semplice

[Copiato link]
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
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com