10.15. Programowanie zorientowane aspektowo
Problem
Chcemy „obudować” pewną metodę dodatkowym kodem, tak aby jej wywołaniu towarzyszyło występowanie dodatkowych efektów.
Rozwiązanie
Używając aliasów i metaprogramowania, możemy ręcznie rozbudować wspomnianą metodę o dodatkowy kod „inicjujący” i „kończący”. Wygodniej będzie to jednak zrobić za pomocą gotowych środków dających identyczny efekt, na przykład gemu glue
lub niezależnej biblioteki AspectR
. Ta ostatnia umożliwia zdefiniowanie klasy „aspektowej”, której metody wywoływane będą (odpowiednio) przed wywołaniem i po wywołaniu właściwej metody.
Oto przykład klasy aspektowej śledzącej wywołania określonej metody oraz wyniki tych wywołań:
require 'aspectr' class Verbose < AspectR::Aspect ...
Get Ruby. Receptury now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.