Wpis z mikrobloga

Mirasy spod tagu #php i #symfony. Tak sobe zacząłem obczajać to sławetne symfony i widzę, że domyślnie jest tam struktura aplikacji jakby to powiedzieć - pozioma, czyli osobno worek na kontrolery, osobno na serwisy, osobno na encje itp. Wprawdze dawno we frameworkach nie pisałem, ale pamiętam, że starodawnych czasach, gdy jeszcze panował zend1 to można było tam skonfigurować stukturę bardziej modułową, czyli np można było zrobić moduł sprzedaż i w nim: kontrolery, encje itp. Czy w symfony takie coś też się praktykuje, czy z jakiegoś powodu struktura "płaska" czy "pozioma" jest lepsza i rekomendowana? W #laravel widziałem bardzo podobnie, nie wiem jak w innych ale podejrzewam, że będzie tak samo. Wydaje mi się, że przy bardziej rozbudowanej aplikacji może to spowodować niezły burdel.
  • 17
@kefas_safek: Możesz robić jak chcesz. W pracy mamy architekturę heksagonalną i właśnie rozbijamy sobie projekt na osobne części. Konfiguracja kontrolerów i serwisów jest w YAML, Doctrine w XML, żeby nie mieszać zależności.

W taki sposób możesz osiągnąć to co miałeś w ZEND 1 czy tam w Symfony < 3.0 (bundle).
@kefas_safek: No ja wiem, że im mniej konfiguracji, tym lepiej, ale widzę, ze w Hiszpanii architektura heksagonalna jest na topie i każda firma musi tego tam używać. Po prostu konfiguracja SF domyślnie wygląda tak:
weź wszyskie foldery oprócz Test, Entity costam jeszcze, wrzuć do Kontenera. I później wyciągasz z kontenera co tam potrzebujesz. Po prostu jeśli będziesz miał inną strukturę plików, to być może bedzie trzeba cośtam w yamlu zmienić, żeby
@kefas_safek: Generalnie dobrą praktyką jest posiadanie modułów oddzielonych od symfony. Ja zazwyczaj robię tak, że mam sobie src/AppBundle i jakiś na przykład src/App i w tym drugim mam sobie logikę biznesową podzieloną na różne moduły i oddzieloną kompletnie od frameworka, więc teoretycznie jakbym kiedyś zdecydował zmienić framework to zmieniam framework, a nie mój kod biznesowy. Tam też trzymam wszelakie encje, ale nie korzystam z annotacji, encja w src/App nie wie, że
@kefas_safek: Wszystko od Ciebie zależy. Osobiście, gdy projekt nie jest bardzo skomplikowany, nie ma wielu modułów, to w folderze Controller, tworze sobie podfoldery, których nazwa będzie odnosić się do jakiejś niewielkiej części systemu np. User, Settings.

Równie dobrze można zmienić konfigurację w pliku services.yaml i folderze src mieć kilka podfolderów z nazwami modułów, a dopiero później w środku foldery odpowiedzialne za kontrolery itp.

Wszystko zależy od konkretnego projektu i potrzeb.
@kefas_safek: Tak, to koledzy wyżej już wyjaśnili i trudno coś więcej dodać ( ͡° ͜ʖ ͡°)
Może tyle tylko, że struktura wyniknie z przyjętych implementowanych wzorców. Jeśli będziesz pisał crudy, to inaczej będzie wyglądała struktura niż jeśli pójdziesz w stronę ADR lub CQRS. Jeszcze inaczej, jeśli będziesz się wpinał listenerami w eventy np. w komponencie Workflow. Dlatego właśnie zrezygnowano z bundli - żeby framework był bardziej elastyczny.