Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 21364|Antwoord: 1

[Bron] .net/C# gebruikt Attributen om eenvoudige AOP te implementeren

[Link kopiëren]
Geplaatst op 18-04-2017 14:54:11 | | |

Laten we beginnen met een eenvoudig stukje code:



Stel dat dit een webprogramma is, we willen eerst de sessie controleren, dan de rechten controleren, een transactie starten, een log schrijven, dan de operatie zelf uitvoeren en tenslotte een log schrijven. Natuurlijk kunnen we niet alle methodecalls naar bovenstaande bewerkingen schrijven in DoSomething(), dus de code wordt een groot stuk rotzooi, dus wat moeten we doen?

Er zijn veel manieren om het te implementeren, zoals het gebruik van frameworks zoals Spring, maar in echte projecten is het niet mogelijk om een framework casual te introduceren, en vaak moeten we zelf mechanismen schrijven.

Hier denk ik aan het Filter in MVC, zolang je een attribuuttag op de Controller of Action zet, kun je nog andere dingen doen voor en na de uitvoering van de methode. Laten we dus gewoon een filterimplementatie simuleren.

Allereerst wordt de oorspronkelijke methode omgevormd tot een elegante manier van featurelabels:




Bij featuretags moeten er klassen zijn die overeenkomen met featuretags, evenals AOP-implementaties, die onafhankelijk in een bestand of assembly kunnen worden opgenomen.

Eerst het label dat aan de methode is gekoppeld, geïmplementeerd als leeg:

//贴在方法上的标签
[AttribuutGebruik(AttribuutDoelen.Method, AllowMultiple = onwaar)]
publieke sealed class MyInterceptorMethodAttribute : Attribute { }
Daarna definieer je het label dat aan de klasse wordt gekoppeld:




Hier is een MyAopHandler-klasse gedefinieerd, geïmplementeerd als volgt:




Let op dat het specifieke bewerkingsgedeelte van de bovenstaande code gelijkwaardig is aan een "proxyklasse", die in wezen de context van de methode-uitvoering verandert. Objectgeoriënteerde programmastructuren zoals delegates kunnen worden gebruikt om de specifieke implementatie aan de buitenwereld bloot te stellen voor secundaire ontwikkeling.




Vorig:ES5, ES6, ES2016, ES. Volgende: Wat is er aan de hand met de versie van Javascrip{filter}t?
Volgend:PowerShell Getting Started Tutorial - versie v0.3
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com