2011-09-06 14 views

Odpowiedz

8

Zgadzam się z @Gordon, że brzmi to jak obiekt biznesowy. Ale jeśli jesteś pewien, że tak nie jest, następnym krokiem jest ustalenie, jak możesz to sklasyfikować. Czy to jest pomocnik? Słuchacz wydarzeń? Klasa użyteczności? Gdy już to określisz, zadaj sobie pytanie: czy jest to specyficzne dla pakietu lub czy zamierzasz go ponownie wykorzystać w projektach?

Załóżmy, że zdecydowałeś, że to odbiornik zdarzeń i należy do pakietu. Umieść go w MyBundle/EventListener. Jeśli jest to pomocnik, umieść go w MyBundle/Helper. Teraz, jeśli planujesz użyć go ponownie w projektach (co w tym przypadku tak naprawdę nie brzmi, ale pamiętaj o mnie ...), może lepiej byłoby stworzyć dla niego miejsce w vendor.

Należy pamiętać, że ponieważ Symfony2 jest tak młody, nie istnieje tak naprawdę lista najlepszych praktyk, które odpowiadają na takie pytania. Teraz to zależy od nas, aby zobaczyć, co działa, a co nie. To tak jak na dzikim zachodzie :)

2

Ponieważ ta klasa najwyraźniej reprezentuje obiekt biznesowy z Twojej domeny, należy do Modelu.

+0

Co w przypadku, gdy nie jest to obiekt biznesowy. Powiedz, że mam klasę "breadcrumb", z dwoma nazwiskami członków i "href"? –

+0

@Robert Nie wiem, gdzie by to zrobił Symfony i Twig. Nadal wstawiałbym go do modelu, ale nie do warstwy Domain, ale do ogólnej warstwy aplikacji, ponieważ jest częścią interfejsu użytkownika. Lub, jeśli jest to wielokrotnego użytku, umieściłbym go w jakimś folderze framework/lib – Gordon

3

Sposób, w jaki odpowiadam na tego typu pytania dla siebie, podchodzę do KnpBundles i sprawdzam, jak robią to inni deweloperzy.

Inną rzeczą, na którą należy zwrócić uwagę, jest fakt, że Symfony2 zapewnia swobodę wyboru konfiguracji. Możesz umieścić wszystko w folderze Random dla wszystkich jądra Symfony2, o ile ustawisz go poprawnie. Cóż, to pewnie trochę do ekstremum, ale na przykład Listener lub EventListener - bez różnicy.

Teraz, jeśli chcesz mnie zapytać, powiedziałbym, że dla Scorecard - w zależności od tego, gdzie masz zamiar go używać, albo Service lub Helper/Util

O breadcrumb - Wygląda na to dobry przykład na przedłużenie gałązki.

+0

Nie sądzę, że jest to usługa. Usługi zwykle wykonują obliczenia, wywołując publiczny interfejs API obiektów Domain. Rzadko hermetyzują swój własny stan ("umiejętność", "efektywność", "piękno"). Są bardziej jak cienka warstwa mediatora między zewnętrzną warstwą, taką jak UI i warstwa Domain. – Gordon

Powiązane problemy