SlideShare a Scribd company logo
AOP w Laravel
Mateusz Antkowiak
Programista PHP
mantkowiak@transparentdata.pl
Zdjęcie
Agenda
● Case Study zamiast wstępu
● Trochę teorii
● Trochę kodu
● Pytań czas
Zadanie
Zadanie dla “Juniora”:
Warto żebyśmy logowali dodatkowo przelewy na
kwotę powyżej 1000 zł.
Zrób to najprościej jak się da.
Stan początkowy
Rozwiązanie 1
CodeReview
Dobry feedback “nie jest zły”:
Co to jest za stała 1000?
A ta metoda to jakaś duża…
Może wydzielmy logowania informacji do osobnej
metody?
Rozwiązanie 2
CodeReview
Ale tutaj łamiemy “S” z SOLID!!!
Rozwiązaniem może być Dekorator
Rozwiązanie 3
Miesiąc później...
Zadanie drugie:
Implementujemy teraz proces związany z
podejmowaniem pieniędzy z konta (np. w okienku
banku lub bankomacie).
Chcemy nadal logować większe transakcje, tak jak
miało to miejsce w przypadku przelewów z jednego
konta na drugie.
Stan początkowy
Rozwiązanie 1
CodeReview
Jest OK!!!
Dobra robota!!!
Kilka miesięcy później...
➔ Zaimplementowaliśmy kolejnych kilkanaście procesów
➔ Zrobiliśmy dla wszystkich dekoratory
➔ Dla wszystkich dekoratorów napisaliśmy warstwy abstrakcji
➔ Zaczęliśmy się wkurzać na myśl o kolejnym “kopiuj/wklej”
➔ Zaplanowaliśmy dev-meeting aby przemyśleć wszystko
jeszcze raz
Programowanie Aspektowe
AOP
Koncept zrodziła się w połowie lat 90.
Jego pomysłodawcami była grupa osób z Xerox
Palo Alto Research Center (PARC).
Koncept na początku został uznany jako “dziwny”.
Programowanie Aspektowe
3 założenia:
Jesteśmy zgodni z SOLID i innymi dobrymi
praktykami obiektowymi
Rozdzielamy w kodzie “niezależne zagadnienia”
(cross cutting concerns)
Definiujemy punkty przecięcia “niezależnych
zagadnień” (join point)
Programowanie Aspektowe
Słowniczek
Aspekt (Aspect):. niezależna funkcjonalność oprogramowania przecinająca
wiele innych np. cachowanie, logowanie, bezpieczeństwo
Wskazówka/Rada (Advice):. akcja wykonywana przez aspekt w określonych
warunkach działania oprogramowania, np. przed wywołaniem metody
Punkty połączenia/styku/interakcji (Join point):. punkt w kodzie aplikacji,
w którym przecinają się niezależne jej funkcjonalności
Punkty przecięcia (Pointcut):. wyrażenie regularne będące warunkiem
uruchomienia aspektu w danym punkcie styku
AOP Instalacja
composer require
goaop/goaop-laravel-bridge
AOP Konfiguracja
➔ Tworzymy Provider
➔ Tworzymy Aspekty
➔ Zarządzamy konfiguracją w config/go_aop.php
(niewymagane, ale przydatne)
AOP Rozwiązanie
AOP Rozwiązanie
AOP Rozwiązanie
AOP Rozwiązanie
Pytania?
mantkowiak@transparentdata.pl
Mateusz Antkowiak

More Related Content

PDF
Klienci mówią, operator słucha, czyli o badaniu dzienniczkowym w Play
PDF
Jak zaprosić 10 tyś zł na info produktach
PDF
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
PDF
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
PDF
Kilka slajdów o castowaniu atrybutów w Eloquent
PDF
Licencje otwartego oprogramowania
PDF
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
PDF
Jak przemycić Shape Up do Scruma?
Klienci mówią, operator słucha, czyli o badaniu dzienniczkowym w Play
Jak zaprosić 10 tyś zł na info produktach
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
Kilka slajdów o castowaniu atrybutów w Eloquent
Licencje otwartego oprogramowania
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przemycić Shape Up do Scruma?

More from Laravel Poland MeetUp (20)

PDF
Cykl życia zapytania HTTP (pod maską)
PDF
Enumy w Laravelu - dlaczego warto stosować?
PDF
Laravelowe paczki do uwierzytelniania
PDF
Przegląd najciekawszych wtyczek do Laravela
PDF
Walidacja w Laravelu
PDF
(prawie) Wszystko o Tinkerze
PDF
Laravel Dusk - prosty przepis na testy E2E
PDF
Laravel Octane - czy na pewno taki szybki?
PDF
Laravel Jobs i PHP8
PDF
Wszystko o Laravel Livewire
PDF
Laravel/PHP - zderzenie z PDFami
PDF
Action-based Laravel
PDF
Automatyzacja utrzymania jakości w środowisku PHP
PDF
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
PDF
Laravel Collection - tablice na sterydach
PDF
Laravel 8.0 - co nowego?
PDF
Speed up web API with Laravel and Swoole using Docker
PDF
Laravel 6.0 - co nowego?
PDF
Przetwarzanie Asynchroniczne i Promises w Laravel
PDF
KPI w projektach IT
Cykl życia zapytania HTTP (pod maską)
Enumy w Laravelu - dlaczego warto stosować?
Laravelowe paczki do uwierzytelniania
Przegląd najciekawszych wtyczek do Laravela
Walidacja w Laravelu
(prawie) Wszystko o Tinkerze
Laravel Dusk - prosty przepis na testy E2E
Laravel Octane - czy na pewno taki szybki?
Laravel Jobs i PHP8
Wszystko o Laravel Livewire
Laravel/PHP - zderzenie z PDFami
Action-based Laravel
Automatyzacja utrzymania jakości w środowisku PHP
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Laravel Collection - tablice na sterydach
Laravel 8.0 - co nowego?
Speed up web API with Laravel and Swoole using Docker
Laravel 6.0 - co nowego?
Przetwarzanie Asynchroniczne i Promises w Laravel
KPI w projektach IT
Ad

AOP w Laravel