Wstrzykiwanie zależności jak w Spring, @Component i @Autowired |
Wstrzykiwanie zależności jak w Spring, @Component i @Autowired |
3.07.2016, 10:11:58
Post
#1
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) |
Podoba mi się podpinanie zależności w Springu. Komponenty tworzymy tak:
Następnie wykorzystujemy je w tych klasach, gdzie są potrzebne:
W Phalcon PHP też istnieje wstrzykiwanie zależności, ale w nieco mniej wygodnej formie. Otóż w pliku startowym musimy skonfigurować wszystkie komponenty (oprócz wstępnie dostępnych) w ten sposób:
Klasa MarkdownParser dziedziczy po Phalcon\Mvc\User\Component
Raz zarejestrowany komponent jest widoczny wszędzie i wynika z tego dużo problemów. Ponadto IDE nie wie o tym i bez dodatkowych zabiegów nie podpowiada składni.
Jak zaimplementować podpinanie zależności à la Spring w PHP? Macie jakiś pomysł? -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
27.08.2016, 12:31:49
Post
#2
|
|
Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) |
Do takich celów służą moduły we frameworkach odpowiedzialne za Dependency Injection. Przykłądowo w przypadku Zend Framework 2 jest to klasa Service Manager.
Wystarczy dopisać jakiegoś rodzaju listener, który za pomocą Reflection zeskanuje dodaną do kontenera klasę i poszuka wszelkich adnotacji. Następnie potrzebna fabryka, która przy zwracaniu obiektów danego serwisu podepnie zadeklarowane za pomocą adnotacji serwisy. Założeniem jest, że adnotowany serwis będzie pobierany wyłącznie za pomocą Service Managera. Wykonanie w kodzie zwyczajnie , spowoduje oczywiście, że zależności nie zostaną wstrzyknięte. Jeżeli zależy Ci na tym drugim, niezbędne byłyby jakieś natywne rozszerzenia do PHP. Osobiście uważam, że nie powinieneś w ogóle takich adnotacji używać. Wiążesz w ten sposób nierozerwalnie swoje klasy z frameworkiem, podczas, gdy powinieneś starać się oderwać swój kod od frameworka w taki sposób, żeby był łatwo przenoszalny do innego projektu/frameworka i był od niego niezależny. Taka jest definicja dobrego kodu, pomijając oczywiście inne zasady typu SOLID/KIS etc. Ten post edytował em1X 27.08.2016, 12:32:32 -------------------- eh, co polska wódka to polska wódka
|
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 07:49 |