Aspect orientat spre programare în postsharp, blog al lui Vlad Sukhachev

Excepție de manipulare

În metoda OnEntry, este creată o tranzacție, metoda OnException se ocupă de excepție, iar metoda OnSuccess este apelată dacă operația nu a aruncat excepții. Clasa TransactionAttribute este un aspect în terminologia AOP, metodele OnEntry, OnException, OnExit sunt sfaturi. Rămâne doar să aflăm cum aplicăm acest aspect. Pentru a face acest lucru, trebuie să marcați metoda DeleteOrder cu atributul [Transaction].







Cache rezultatele unui apel de funcții

Valorile cache sunt stocate în variabila clasa _cache, care este declarată ca Dicționar. Pentru fiecare set de argumente, cheia de șir este calculată folosind metoda MakeKey. Dacă cheia este prezentă în dicționar, atunci apelul funcției nu are loc. În caz contrar, funcția este implicit apelată prin args.Proceed () și rezultatul este stocat în dicționar. Metoda MakeKey primește o listă de argumente și un obiect a cărui metodă este apelată și returnează un hash șir pentru acest apel.






Metoda _methodName stochează numele metodei, devine cunoscută la etapa de compilare.
Un exemplu de utilizare a cache-ului pentru apeluri funcționale este după cum urmează.

Validarea valorilor de proprietate

Validarea la atribuirea unei noi valori unei proprietăți complică codul de atribuire. Ar fi convenabil să facem acest lucru declarativ cu ajutorul atributelor proprietății. În exemplul de mai jos, proprietatea Customer.Name este bifată utilizând o expresie regulată. Verificarea se efectuează în momentul atribuirii unei noi valori, adică de fapt în setul de punere în aplicare.

Pentru ca acest cod să funcționeze, trebuie să creăm o clasă RegExpValidatorAttribute, derivată de la LocationInterceptionAspect. Acest aspect vă permite să introduceți codul într-un set sau să obțineți implementarea pentru o anumită proprietate.







Trimiteți-le prietenilor: