Dependency inversion w php
-
Upload
rafal-kanski -
Category
Internet
-
view
157 -
download
0
Transcript of Dependency inversion w php
INSTALUJEMY...
COMPOSER.JSON{ "name": "application/my-app", "description": “Project", "minimum-stability": "stable", "require": { "artykuly/api-client": "^1.2" }}
INSTALUJEMY...
COMPOSER.JSON{ "name": "application/my-app", "description": “Project", "minimum-stability": "stable", "require": { "artykuly/api-client": "^1.2", "feed/api-client": "^2.1" }}
APLIKACJA
JEDNA APLIKACJA WIELE KLIENTÓW API
KLIENT API
KLIENT API
KLIENT API
KLIENT APIJSON
XMLOAUTH
SAML
JAKO TWÓRCA KLIENTA API
“Uzależniaj kod od abstrakcji a nie od klas rzeczywistych”
Dependency Inversion
JAKO TWÓRCA KLIENTA API
{ "name": "somename/api-client", "description": "API Client", "minimum-stability": "stable", "require": { "guzzlehttp/guzzle": "^6.2" }}
Uzależniam się od klas rzeczywistych...MINUS
ROZWIĄZANIE
WIRTUALNA PACZKA
{ "name": "somename/virtual-package-implementation", "description": "I deliver implementation", "provide": { "somename/virtual-package-name": "1.0" }, "require": { "somename/virtual-package-interfaces": "^1.2" }}
JAKO TWÓRCA KLIENTA API
Jak uniezależnić się od implementacji?PYTANIE
{ "name": "somename/api-client", "description": "API Client", "minimum-stability": "stable", "require": { "guzzlehttp/guzzle": "^6.2" }}
A paczka wirtualna dla tych interfejsów?
JAKO TWÓRCA KLIENTA API
PYTANIE
PSR-7 psr/http-message-implementation
PSR-7 nie daje interfejsu klienta HTTP
JAKO TWÓRCA KLIENTA API
PROBLEM
RequestInterface ResponseInterface
UriInterface...PSR-7
UZALEŻNIAMY SIĘ OD WIRTUALNEJ PACZKI
INSTALACJA
{ "name": "somename/api-client", "description": "API Client", "minimum-stability": "stable", "require": { "php-http/client-implementation": "^1.0" }}
UZALEŻNIAMY SIĘ OD WIRTUALNEJ PACZKI
{ "name": "somename/api-client", "description": "API Client", "minimum-stability": "stable", "require": { "php-http/client-implementation": "^1.0" }}
JAK ZACHOWA SIĘ COMPOSER PRZY composer install
WADY WIRTUALNYCH PACZEK
COMPOSER POINFORMUJE ŻE NIE ODNALAZŁ PACZKI 1
ROZWIĄZANIE
WIEDZA CZYM JEST WIRTUALNA PACZKA WIEDZA JAK JE INSTALOWAĆ
WADY WIRTUALNYCH PACZEK
WIRTUALNĄ PACZKĘ MOŻNA STWORZYĆ NIE IMPLEMENTUJĄC INTERFEJSÓW 2
{ "name": "somename/virtual-package-implementation", "description": "I don’t deliver implementation", "provide": { "somename/virtual-package-name": "1.0" }}
WADY WIRTUALNYCH PACZEK
MOŻE ISTNIEĆ BIBLIOTEKA DOSTARCZAJĄCA INTERFEJS NIE INFORMUJĄC O TYM 3
{ "name": "somename/virtual-package-implementation", "description": "I deliver implementation", "require": { "somename/virtual-package-interfaces": "^1.2" }}
WADY WIRTUALNYCH PACZEK
KAŻDY MOŻE STWORZYĆ PACZKĘ WIRTUALNĄ O DOWOLNEJ NAZWIE 4
{ "name": "somename/virtual-package-implementation", "description": "I don’t deliver implementation", "provide": { "somename/virtual-package-name-typo": "1.0" }}
DAJEMY WYBÓR UŻYTKOWNIKOM KONKRETNEJ BIBLIOTEKI 2
ZALETY WIRTUALNYCH PACZEK
MAM GUZZLE 5 TO INSTALUJE ADAPTER
NIE PODOBA MI SIĘ WYDAJNOŚĆ TO ZMIENIAM IMPLEMENTACJĘ
PRZYKŁAD KLIENTA
https://github.com/Schibsted-Tech-Polska/capi_php_sdk
{ “require”: { "php": ">=5.5", "php-http/client-implementation": "^1.0", "php-http/message-factory-implementation": "^1.0" } ….}