Matrix12
10.09.2015, 18:30:08
Witam,
tworze projekt w Symfony i mam pytanie odnośnie architektury danego serwisu.
Chcę to zrobić w następujący sposób :
-Front ->
-NewsBundle(tutaj trzymam widoki, kontrolery które będą pytały serwisy o np. newsy)
-Core ->
->NewsBundle ->(tutaj trzymam crudy które operują na serwisach, zapisują,updatetują, usuwają)
-CoreDomain ->
->NewsBundle(tutaj trzymam serwisy,eventy,biblioteki, repozytoria i encje)
Czy to jest dobre podejście do tworzenia architektury czy nie? Coś w tym zmienić?
Damonsson
10.09.2015, 20:01:32
Nie. Po co? Symfony2 ma przecież ładny podział natywny na wszystko.
Kontrolery, Formularze, Serwisy, Encje w obrębie jednego bundla.
Matrix12
10.09.2015, 20:39:35
Wydaje mi się, że po mojemu odseparowałbym logikę od frameworka.
P.S W symfony w encji można wybrać typ dla kolumny - obiekt. W takim przypadku zapisuje tam nazwę obiektu czy te pole w bazie wgl się nie pojawi?
Damonsson
10.09.2015, 22:59:40
Masz racje, tylko Ci się wydaje.
Jeżeli masz na myśli encję w Doctrine to tak jest taki typ jak object, jest to normalne pole TEXT w bazie MySQL, gdzie obiekt masz serializowany włącznie z nazwą oczywiście.
Matrix12
11.09.2015, 06:43:04
Z punktu widzenia samego DDD to powinno się odseparować wartwę logiki od całej aplikacji,. Czy mój sposób tego nie robi?
Xelah
11.09.2015, 08:04:14
Pozwolę sobie na jedną drobną uwagę. Rozkład katalogów i klas nie ma kompletnie niczego wspólnego z separation of concerns. Logika biznesowa nie ma prawa mieć nic wspólnego z frameworkeim. To, że w 99 przypadkach na 100 ma nie wynika ze struktury katalogów tylko z podejścia programisty do problemu.
Powiem tak: Nie kombinuj ze strukturą katalogów, bo to jest dosłownie najmniej istotny element całej układanki. Logikę biznesową odseparowuje się od frameworka na różne sposoby, a żaden z nich nie dotyczy się tego gdzie będziesz miał swoje klasy.
Matrix12
11.09.2015, 08:58:17
Ale z drugiej strony, mamy wszystkie serwisy i encje osobno to raz, dwa można tam trzymać interfejsy dostępne dla wszystkich a nie w kazdym bundlu osobny interface skoro np. wszystkie sewisy będa go wykorzystywały..
Forti
11.09.2015, 09:22:42
Utrudniasz sobie zycie na siłe.
Zrób tak:
Matric\ServiceBundle:
- wszelkie serwisy które NIE MAJA NIC wspólnego z symfony. Jako parametry in/out nie mogą przyjmować nic z symfony. W 100% przenośne i nie zależne.
Matrix12\CoreBundle:
- encje
- formularze (symfonowe)
- wszelkie komendy etc
- config/service.yml gdzie np. definiujesz serwisy z ServiceBundle (to jest szybszy dostęp do nich w controller
Matrix12\WebBundle:
- widoki dla uzytkowników
- kontrollery dla użytkowników
Matrix12\AdminBundle:
- widoki dla panelu administracyjnego
- kontrollery dla panelu administracyjnego
Taki podział jest ładny. Chociaż ja i tak CoreBundle i ServiceBundle łącze w jeden.. i po prostu dla ServiceBundle mam odzielny folder Services.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.