Wprowadzenie do implementacji architektur plug-in w PHP

Preview:

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ę

Recommended