Upload
phpcon-poland
View
3.067
Download
3
Embed Size (px)
DESCRIPTION
Autor: Damian TylczyńskiAktualne serwisy internetowe coraz częściej przypominają rozbudowane aplikacje, tworzone w dużych zespołach programistów z myślą o długofalowym rozwoju. Opowiem jak okiełznać pokaźne bazy kodu i umożliwić elastyczną rozbudowę aplikacji dzięki architekturom typu plug-in.
Citation preview
Wprowadzenie do implementacjiarchitektur plug-in w PHP
Damian Tylczyński
„Gdybym wiedział co robię, to przecież nie była by praca badawcza„
- Albert Einstein
Systemmonolityczny
Funkcjonalność
„smaller parts (modules) that can be independently created and then used in different systems to drive multiple functionalities”
- Wikipedia, Modular design
Systemarchitektury
plug-in
Usługi systemu
Plug-in
Niezmienna postać,zmienna funkcjonalnośćna żądanie
Stabilne API
Miejsce na dalszy rozwój
„LINUX is a monolithic style system. This is a giant step back into the 1970s. That is like taking an existing, working C program and rewriting it in BASIC. To me, writing a monolithic system in 1991 is a truly poor idea„
- Andy Tanenbaum
Spoiler:
Darwin, Linux, Windows NTnie są mikro-jądrami
XULRunner
Plug-in powinien skupić sięna wykonaniu pojedynczego zadania
Nie ArticlesPlugin
tylko:
● PagePlugin – wyświetlanie i edycja,● CategoriesPlugin – kategoryzacja,● TagPlugin – tagi,● CommentsPlugin – komentarze,● ScorePlugin – ocenianie,
Nie UsersPlugin
tylko:
● AuthPlugin – ACL i autoryzacja,● LoginPlugin – logowanie,● RegisterPlugin – rejestracja,● UserDataPlugin – dane użytkownika,
Dostęp do bazy danych?
Sesje?
Także plug-in
(mikro) jądro
Udostępnienie fundamentalnego środowiska działania plug-in
Konfiguracjaśrodowiska
Jądro i zdarzenia
Rejestracjai konfiguracja pluginów
Uruchomienieaplikacji
Instalacja,→ Uruchomienie,→ Działanie, Aktualizacja→ Zatrzymanie, Usunięcie.
Cykl życia pluginu:
Zarządzanie pluginamiTak, to też plugin
Plug-in to nie tylko „jakaś”funkcja do wywołania
Zależności
Instalacja
AktualizacjaReagowanie
Pliki multimedialne
Nadpisywanie
Udostępnianie „narzędzi”
JądroZarządzanie
plug-in
Wywołanieakcji
Zarządzanieplug-in
ObsługażądaniaHTTP
OdpowiedźHTTP
Plug-iny
M VCAbstrakcjabazy danych
Systemszablonów
Plug-in musi mieć możliwość komunikacjiz innymi częściami systemu
(i z innymi pluginami)
Luźne wiązania
Pośrednik
Programowanie zdarzeniowe
Wysłanie
Odebranie
Bąbelkowanie
Zatrzymywanie bąbelkowania
I funkcje domyślne też
Obiekt kontekstu naszym pośrednikiem(wielozadaniowym)
getContext()
Wstrzykiwanie zależności umożliwiarozpropagowywanie obiektu kontekstu
Każdy plug-inmusi posiadać dostęp do własnego
obiektu kontekstu
Każda klasa.Każda usługa.
Usługi?
Usługa to zestaw funkcji posiadających zunifikowane API, implementujące rozwiązanie
pewnego problemu (uff...)
Dlaczego nie wszędzie zdarzenia?Na zdarzenie nie musi reagować
żadna funkcja
Plugin != Usługa
Plugin > Usługa
LogsService – logowanie w aplikacji.
Pluginy?LogsTxtPluginLogsNullPlugin
Zunifikowany interfejs?log( $msg )warn( $msg )err( $msg )
Kontekst musi udostępniać usługi(zachowywać się jak kontener zależności)
Programowanie zdarzeniowe.Wzorzec filtra.
Wzorzec dekoratora.Wzorzec strategii.
Obiekty proxy.Kontener wstrzykiwania zależności.
Narzędzia
Zalety
Dziel i rządź GTD programowania
Bezpieczeństwo
Mniej zależnościZrównoleglenie prac
Stabilność
Dziękuję za uwagę