Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][OOP]Gdzie umieścić złożoną logikę - kilka klas zgodnych z SOLID?
mathieus
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 9.01.2021

Ostrzeżenie: (0%)
-----


Witam,

mam kilka klas połącząnych, załóżmy, według wzorca Mediator,
który skłąda się z conajmniej dwóch interfejsów i 4 klas.
Jak wiadomo, standardem jest: jedna klasa, jeden plik.
Gdzie umieścić te pliki i jak łączyć klasy zgodnie ze standardami?:

  • w tym samym katalogu co kontrolery?
  • w osobnym podkatalogu katalogu src?
  • jako service? jak wtedy ogarnąć kilka klas?
  • jako biblioteka? z tym to zupełnie nie wiem jak - bardzo byłbym rad za wskazówki (np. link do opisu w internecie)...


z góry dziękuję za wskazówki.
Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
LowiczakPL
post
Post #2





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


No więc w Symfony gdy stworzysz sobie kontroler z akcjami.

Potrzebny jest serwis, który powinieneś wstrzyknąć w metodzie nigdy w konstruktorze kontrolera (co innego w serwisie, w którym możesz robić to bezpośrednio w konstruktorze).

Taki uproszczony przykład skorzystania z serwisu i repozytorium oraz wstrzykiwanie serwisu i repozytorium do metody, czyli to Twoje łącznie no chyba że o co innego chodziło.

Metoda Kontrolera:
  1. /**
  2.   * @Route("/sell/{name}/{quantity}", name="sell", methods={"POST"})
  3.   *
  4.   * @param CPocketRepository $repository
  5.   * @param CPocketService $service
  6.   * @param string $name
  7.   * @param int $quantity
  8.   */
  9. private function sell(CPocketRepository $repository, CPocketService $service, string $name, int $quantity): void
  10. {
  11. $product = $repository->findOneByName($name);
  12. $service->sell($product, $quantity);
  13. $em = $this->getDoctrine()->getManager();
  14. $em->persist($product);
  15. $em->flush();
  16. }


Metoda serwisu CPocketService:
  1. private function sell(CPocket $cPocket, int $quantity): void
  2. {
  3. $cPocket->setQuantity($cPocket->getQuantity() + 99);
  4. }


Ten post edytował LowiczakPL 13.01.2021, 12:35:43
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 21:26