Gościem drugiego odcinka DevTalk jest Basia Fusińska – programistka, “architektka”, menadżerka, trenerka…
Rozmawiamy głównie o AOP – Aspect Oriented Programming – programowaniu aspektowym. Basia opowiada o swoich bojach na tym polu i przedstawia dostępne techniki oraz narzędzia przydatne dla adeptów tej sztuki. Udowadnia też, że i TY używasz aspektów!
Uwaga: dzięki uprzejmości producenta narzędzia PostSharp – do wygrania licencja na PostSharp Ultimate o wartości 749$! Szczegóły w odcinku i na stronie http://devtalk.pl/konkurs-na-logo/.
Uwaga 2: ten (i “hopefully” kolejne też) odcinek został nagrany na profesjonalnym sprzęcie (mikrofon + mixer) użyczonym przez Roberta, właściciela firmy Ultrico. Dzięki!
Uwaga 3: wszelkie uwagi – czy to do technikaliów, czy do merytoryki – bardzo mile widziane, zostawiajcie komentarze! :)

Ważne adresy:
- zapisz się na newsletter
- zasubskrybuj w iTunes, Spotify lub przez RSS
- ściągnij odcinek w mp3
Linki do materiałów omawianych w odcinku:
- Basia na dotnetconfpl: “Programowanie zorientowane aspektowo (AOP)” (https://www.youtube.com/watch?v=es_qdXKSh7M)
- PostSharp (http://www.postsharp.net)
- Gael Fraiteur (twórca PostSharp) o AOP z Zine Day 2008 (sic!), BARDZO polecam (https://vimeo.com/2116491)
- Znowu Gael na ZineDay 2008, tym razem w parze z Jakubem Binkowskim (https://vimeo.com/2387616)
- Fody (https://github.com/Fody/Fody)
- Slajdy z prezentacji Pawła Łukasika o Fody (http://slides.com/pawellukasik/fody#/)
- Nagranie video z prezentacji Pawła Łukasika o Fody (https://www.youtube.com/watch?v=Lc1pQ-mCyys)
- Autofac Interceptors (https://code.google.com/p/autofac/wiki/DynamicProxy2)
- Policy Injection Application Block (http://msdn.microsoft.com/en-us/library/ff664572(v=pandp.50).aspx)
- Code Contracts (http://msdn.microsoft.com/en-us/library/dd264808(v=vs.110).aspx)
- książka Matthew D. Groves “AOP in .NET” (http://www.manning.com/groves/)
Muzyka wykorzystana w intro:
“Misuse” Kevin MacLeod (incompetech.com)
Licensed under Creative Commons: By Attribution 3.0
http://creativecommons.org/licenses/by/3.0/
Dobra realizacja, świetny temat i gość :) Jedyne czego mi zabrakło to po skończonej rozmowie z gościem takiego podsumowania odcinka z twojej strony, może jakiejś małej zapowiedzi co w następnym, takiego swoistego rozstania się ze słuchaczami. Zmieniłbym bym także jingla na ogłoszenia ;)
Pozdrawiam i do usłyszenia!
Grzegorz,
Dzięki :).
Co do “outro” to faktycznie dobry pomysł, teraz to się urywa niespodziewanie. Pomyślę i od następnego razu postaram się coś takiego przygotować.
Co do zapowiedzi kolejnego odcinka – to jest na tyle młode i żywe że jeszcze nie miałem zaplanowanego następnego nagrywając ten. Teraz są w kolejce już dwa, ale w sumie i tak nie wiem czy będę chciał przed czasem zdradzać kto/co/o czym.
A “devgłoszenia”… pierwotnie miało być “ogłoszenia devpasterskie” więc i tak znalazłem półśrodek ;). Chyba że chodzi o sam dźwięk – jeśli tak to się zgadzam, finalnie *prawdopodobnie* będzie coś innego.
Profesjonalnie!
Nie wiem, czy to zasługa tych specjalistycznych mikrofonów i mikserów… Ale macie piękne głosy! :)
Rafał, thx, się prawie zarumieniłem. Zaraz podeślę komentarz Basi to ona też się prawie zarumieni ;).
Ja również nie widzę za bardzo zastosowań dla PostSharp. Zwłaszcza jeżeli kosztuje tyle ile kosztuje :) Można by się zastanowić nad użyciem tego, ale za darmo. Rzeczy, które daje i są naprawdę użyteczne, można mieć za darmo z wykorzystaniem kontenera.
Nie zgodzę się też ze słowami Twojego gościa co do minusów wykorzystania kontenerów do implementacji aspektów. W PostSharp też nie dodaje się atrybutu do każdej z metod każdej z klas (to byłoby straszne), żeby np. dodać logowanie. Również robi się to globalnie, czyli również “nie widać tego” i można o tym zapomnieć.
Nie rozumiem również jak dekoratory łamią SRP?
Piotr,
Thx za komentarz, gdyby każdy się z każdym zgadzał to by było strasznie nudno :).
Co do logowania to Basia mówiła i u mnie i na dotnetconf, że to scenariusz przydatny tylko podczas demonstracji. Jestem skłonny się zgodzić.
A dekoratory i SRP – siłą rzeczy DODAJĄ one odpowiedzialność do jakiejś klasy poprzez opakowanie jej w inną klasę, ale… też bym nie powiedział że łamią SRP, moim zdaniem raczej właśnie szanują SRP poprzez dystrybucję odpowiedzialności do osobnych klas a nie doklepywanie kolejnych rzeczy do klasy oryginalnej. Ale to było spotkanie o AOP :).
Dorzucę swoich 50 centów. Dużą krzywdę robi się AOP a bardziej AOSD (aspect-oriented software development) mówiąc że nie jest do umieszczania reguł/logiki biznesowych. Skupiliście się na konkretnym sposobie implementacji AOP (wstrzykiwanie, weaving itd konkretnych rozwiązaniach) a nie na samej idei AOSD. AOP nie jest ograniczony tylko do infrastruktury, problemów technicznych a cross cutting concerns nie oznacza tylko technicznych aspektów jest to moim zdaniem zbyt dużym uogólnieniem. Czasem logowanie zdarzeń może być wymaganiem funkcjonalnym a same wymagania niefunkcjonalne mogą składać się z funkcjonalnych. CCC mogą być również reguły biznesowe, przecinające wiele domen (core concern). Chyba wszyscy się zgodzimy że ‘Concerns’ jako… Read more »
Piotr,
Jasne, ze za pomoca PostSharp mozesz aspekty dodac globalnie. Ale… po pierwsze masz rowniez mozliwosc okreslenia za pomoca atrybutow konkretnych metod. A po drugie, gdy uzywasz kontenera (a przynajmniej Autofac z wtyczka Castle.Windsor, ktorego uzywam w swoim demo), dodaje on aspekt do _kazdej_ metody klasy do ktorej uzywam interceptora.
To, jak testować, to co kod aspektu robi (Testing the advice) w przypadku tkania bibliotek za pomocą narzędzi takich jak Fody, można podejrzeć w projekcie https://github.com/Fody/BasicFodyAddin, w którym napisany jest przykład budowania paczki NuGet, ale przy okazji tam też jest napisany test jednostkowy. W skrócie, nowe, utkane assembly zasysane jest do testów jednostkowych. Tutaj nabazgrałem kilka własnych linijek bazując na tym projekcie: http://teo-vincent.blogspot.com/2014/11/unit-tests-advice-aspect-oriented.html.
1. Dobrze, że na końcu jest rochę Twojego zdania na temat AOP (już myslałem, że go nie wyrazisz)
2. Rozwiń myśl “WCF przeklęty”. Rozważam wpakowanie się w WCF w projekcie “na lata” i na razie nie wiem co mi grozi.
Artur, Tutaj założenie było takie aby jednak głównie Basia mówiła – ja AOP unikam ze względów raczej “ideologicznych”, nie używałem post#/fody w projekcie prawdziwym. Więc i wypowiadać się jakoś autorytatywnie nie mogę. WCF: miałem w kilku projektach i ZAWSZE kończyło się to źle. W teorii jest pięknie i ślicznie, niby wszystko ze wszystkim gada, ale jak pojawia się problem to w 90% odpowiedź jest jedna: “ustaw wszystkie tresholdy na max”. Założeniowo WCF jest ok, ale z praktyką jest dużo gorzej (jak to dość często z produktami od MS bywa). Jak się wywali (a się wywali prędzej czy później) to jest… Read more »
[…] pisał – można znaleźć na ten temat sporo informacji. Z lokalnego podwórka polecam DevTalk 02 czy tagi AOP lub PostSharp na […]