Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Refaktoryzacja kontrolerów Symfony. Proszę o wskazówki.
porzeczki
post
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 15.09.2016
Skąd: Warszawa

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


Chciałbym zabrać się za refaktoryzację projektu (pierwszego i jedynego jaki zrobiłem - praca dyplomowa inż). Robiłem go nie zwracając uwagi na zasady porządnego kodu, bo ich nie znałem, projekt miał wyglądać dobrze w przeglądarce internetowej a nie w IDE. Teraz, gdy naczytałem się stosu książek i best practices głowa pęka i nie potrafię tego natłoku nowych informacji posortować w głowie i wykorzystać.

Jakby komuś się strasznie nudziło to byłbym bardzo wdzięczny za wskazanie głupot w tych kontrolerach i ogólnych wskazówek typu: "takie rzeczy to przenieś i używaj jako usług", " z tego najlepiej zrobić listener", "takie coś nie powinno być w kontrolerze".

Będę wdzięczny za każdą, nawet najbardziej ogólną, nie związaną z tą aplikacją uwagę.

github.com/.../Bundle/Controller/


edit:
chociaż tak sobie wszedłem teraz w pierwszy lepszy kontroler to zacząłem wątpić by komuś chciało się rozkminiać o co tam w ogóle chodzi,a bez zrozumienia o co chodzi chyba nie da się strzelać poradami jak to refaktoryzować.

Ten post edytował porzeczki 28.09.2016, 02:19:12
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kpt_lucek
post
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


Cytat
czy listenerów i usług ładnie jest używać do kodu jednokrotnego użytku byle odchudzić kontroler? Np gdybym chciał wepchnąć cały kod z powyższego if($form->isValid()){ do listenera/usługi.


Tak, stwierdzenie "odchudzenia" kontrolera nie do końca jest tutaj poprawne, zgodnie z założeniami SOLID, a dokładniej samego SingleResponsibilityPrinciple, powinieneś budować architekturę tak, żeby każdy z wytworzonych przez Ciebie obiektów miał 1 odpowiedzialność, nie zawsze niestety jest to takie proste, polecam przeczytać TO.

W SF2/3 założeniem kontrolera (mówiąc dokładniej, akcji w kontrolerze) jest zebranie wszystkich odpowiednich danych, przemielenie tego poprzez usługi (serwisy) i wyplucie Response'a, tak powinna wyglądać "logika" akcji w kontrolerze.

Jak możesz uprościć kod który podałeś.
Moja prywatna opinia

  1. $session = $request->getSession();
  2. $em = $this->getDoctrine()->getManager();
  3. $logged = $this->get('security.authorization_checker')
  4. ->isGranted('IS_AUTHENTICATED_FULLY');

1. Masz dostępny serwis session
2. Masz dostępną metodę
  1. $logged = $this-getUser() instanceof UserInterface;
  2. // lub po prostu
  3. $this->isGranted('ROLE_USER');
  4.  
  5. //Jak chcesz wywalić 403
  6. $this->denyAccessUnlessGranted('ROLE_USER');


---Ogólnie polecam sprawdzenie metod obiektów które rozszerzasz (IMG:style_emoticons/default/smile.gif)

Cytat
  1. $ksiazka = $this->getDoctrine()
  2. ->getRepository('AppBundle:Ksiazka')
  3. ->find($isbn);
  4. $isbn=$ksiazka->getIsbn();
  5. $tytul=$ksiazka->getTytul();
  6. $autor=$ksiazka->getAutor();
  7. $cena=$ksiazka->getCena();
  8. $rokwydania=$ksiazka->getRokwydania();
  9. $ilosc=$quantity;
  10. $zamowienieProdukt = new ZamowienieProdukt();
  11. $zamowienieProdukt->setIdzamowienie($zamowienie);
  12. $zamowienieProdukt->setIsbn($ksiazka);
  13. $zamowienieProdukt->setTytul($tytul);
  14. $zamowienieProdukt->setAutor($autor);
  15. $zamowienieProdukt->setCenaproduktu($cena);
  16. $zamowienieProdukt->setRokwydania($rokwydania);
  17. $zamowienieProdukt->setIlosc($ilosc);


Machnij do tego jakiś transformer o ile już musisz robić to w taki sposób, lub przemyśl, czy Twój formularz na prawdę musi działać tak topornie? Jeżeli musi, to może To Ci jakoś ułatwi pracę.

Cytat
  1. return $this->redirect($this->generateUrl('potwierdzenie'));
  2.  
  3. // a może po prostu tak: return $this->redirectToRoute('potwierdzenie');


Ogólnie, to do ogrania forma użyam handlera, a ten z innych udogodnień, które przejmują pewną część procesu.

Możesz zainteresować się takim rozwiązaniem, napisać własne, lub zupełnie to olać, ale pamiętaj, że im bardziej coś podzielisz, tym łatwiej będzie Ci wpływać na kod w przyszłości, testować go jak i wymieniać poszczególne "komponenty".

Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 16.10.2025 - 17:07