czytam poradniki o refaktoryzacji, książki o wzorcach, ale gdy patrzę na poniższa klasę to patrzę, patrzę i wyłączam IDE. Potem znowu patrzę i znowu wyłączam. I tak mam od wczoraj. Nie wiem jak się do tego sensownie dobrać, głowa boli od patrzenia na ten bałagan, nazwy zmiennych. Nie wiem czym się kierować przenosząc kawał kodu by tworzyć obiekty/usługi.

Uwaga, celowo wybrałem najgłupszy kontroler projektu, robiony przez kompletnego amatora, byle działał, nikt miał tego nie oglądać, ani używać.


Pomijając głupie nazwy i liczbę użytych warunków "else", Z czym mam problem:

- nie wiem czym się kierować przenosząc kawał kodu do osobnej klasy. Czy mam po prostu wyciąć cały kod, przenieść do nowej klasy i w kontrolerze odebrać tylko właściwości potrzebne do renderowania? Czy raczej z powyższego porobić z 10 nowych klas? ale czym się kierować wybierając kawałek kodu do nowej klasy?
- czy każdą utworzoną klasę mam zamienić w usługę?

symfony


  1. class ZarzadcaController extends Controller
  2. {
  3.  
  4. /**
  5.   * @Route("/panel/{findBy}-{Identifier}", name="panelSortFromDetails")
  6.   * @Route("/panel/{sortArr}/{orderBy}/{query}/{EntFldName}", name="panelSort")
  7.   */
  8. public function panelsortAction(Request $request,$sortArr=false, $orderBy='idzamowienie', $query=false,$EntFldName=false,
  9. $findBy = false, $Identifier = false)
  10. {
  11. //[-ASC DESC sortowanie-]
  12. //Jeśli pierwszy raz otwieram stronę to tworzę tablicę $sortArr
  13. //i każdy element ustawiam na 'null' poza Numer=ASC
  14. //else
  15. //tworzę tablicę $sortArr każdy element ustawiam na 'null'
  16. //poza klikniętym który zmieniam ASC na DESC i odwrotnie .
  17. /*1*/ if(!($sortArr)){$sortArr=$this->setAllNullNumerASC();}
  18. else{
  19. $sortArr = $this->setSortVar($sortArr);
  20. $sortArr = $this->AscDescChanger($sortArr,$orderBy);
  21. }
  22.  
  23. //[-Formularze-] Tworzę formularze o strukturze XxxType. Bez zawartości.
  24. $StatusForm = $this->createForm(StatusType::class,null, array(
  25. 'action' => $this->generateUrl('panelSortFromDetails')));
  26. $DataZamForm = $this->createForm(DataZamType::class,null, array(
  27. 'action' => $this->generateUrl('panelSortFromDetails')));
  28. // $DataZamForm = $this->createForm(DataZamType::class);
  29. $NrKlientaForm = $this->createForm(NrKlientaType::class,null, array(
  30. 'action' => $this->generateUrl('panelSortFromDetails')));
  31. // $NrKlientaForm = $this->createForm(NrKlientaType::class);
  32.  
  33. //[-Formularze-]Jeśli wypełniłem formularz to odbieram zawartość
  34. $StatusForm->handleRequest($request);
  35. $DataZamForm->handleRequest($request);
  36. $NrKlientaForm->handleRequest($request);
  37.  
  38. //kasuję kilka zmiennych bo nie wiedzieć czemu po wybraniu filtra i zmianie sortowania
  39. //nie reaguje na kolejne filtry
  40. if(($StatusForm->isValid())or($DataZamForm->isValid())or($NrKlientaForm->isValid())){
  41. $EntFldName=false;
  42. $query=false;
  43. }
  44. //[-Filtr-]Sprawdza czy kliknięty był filtr.
  45. //$findBy = 'status' or 'data' or 'klient' or 'all'
  46. // $findBy = $this->findByWhat($StatusForm,$DataZamForm,$NrKlientaForm,$EntFldName);
  47. if(!($findBy)){ $findBy = $this->findByWhat($StatusForm,$DataZamForm,$NrKlientaForm,$EntFldName);}
  48.  
  49. //[-Filtr-]Jeśli przechodzę z filtra do filtra to kasuję query
  50. if(!($EntFldName)){$query=false;}
  51.  
  52. //[-Repozytorium-][-Sortowanie-]Najważniejsze. Tworzę repozytorium $zamowienia (wykorzystywane do
  53. //utworzenia tabeli i formularzy panelu) i ustawiam elementy
  54. //tablicy $sortArr.
  55. if($findBy == 'all'){
  56. $temp = $this->zamowienieRepositoryMakerAndSortArrChangerForAll($orderBy, $sortArr);
  57. $sortArr = $temp['sortArr'];
  58. $zamowienia = $temp['zamowienia'];
  59. }elseif($findBy == 'idstatus'){
  60. //jeśli wcześniej użyłem filtrowania a teraz tylko kliknięto zmianę sortowania to
  61. //odbieram poprzednie dane o filtrze w przeciwnym razie odbieram dane formularza filtra
  62. if(!($query)){
  63. if(!$Identifier){
  64. $Identifier = $StatusForm->get('status')->getData();
  65. $Identifier = $Identifier->getIdstatus();
  66. }
  67. $query = 'idstatus = '.$Identifier;
  68. }
  69. $EntFldName = 'idstatus';
  70. /*2*/ $temp = $this->zamowienieRepositoryMakerAndSortArrChangerNotForAll(
  71. $query ,$sortArr, $orderBy);
  72. $sortArr = $temp['sortArr'];
  73. $zamowienia = $temp['zamowienia'];
  74.  
  75. }
  76. elseif($findBy == 'data'){
  77. if(!($query)){
  78. $od = $DataZamForm->get('od')->getData()->format('Y-m-d H:i:s');
  79. $do = $DataZamForm->get('do')->getData()->format('Y-m-d H:i:s');
  80. $query = "datazlozenia BETWEEN '".$od."' AND '".$do."'";
  81. } else {
  82. $query = urldecode($query);
  83.  
  84. }
  85. $EntFldName = 'data';
  86. $temp = $this->zamowienieRepositoryMakerAndSortArrChangerNotForAll(
  87. $query ,$sortArr, $orderBy);
  88. $sortArr = $temp['sortArr'];
  89. $zamowienia = $temp['zamowienia'];
  90. $query= urlencode($query);
  91.  
  92. }elseif($findBy == 'idklient'){
  93. if(!($query)){
  94. if(!$Identifier){
  95. $Identifier = $NrKlientaForm->get('idklient')->getData();
  96. $Identifier = $Identifier->getIdklient();
  97. }
  98. $query = 'idklient = '.$Identifier;
  99. }
  100. $EntFldName = 'idklient';
  101. /*2*/ $temp = $this->zamowienieRepositoryMakerAndSortArrChangerNotForAll(
  102. $query ,$sortArr, $orderBy);
  103. $sortArr = $temp['sortArr'];
  104. $zamowienia = $temp['zamowienia'];
  105. }else{
  106. throw new \Exception('Nie można znaleźć zamówień dla '.$findBy);
  107. }
  108.  
  109. //[-Repozytorium II-]Tworzy zmienną $zamowieniaProdukty wysyłaną do Twiga. Wykorzystywane
  110. //tam do obliczenia sumy i ilości produktów dla każdego zamówienia.
  111. $zamowieniaProdukty= $this->getDoctrine()
  112. ->getRepository('AppBundle:ZamowienieProdukt')
  113. ->findall();
  114.  
  115. //[-Formularz Główny-]Ładowanie $zamowieniaList - zmiennej potrzebnej do głównego formularza.
  116. //To kluczowa zmienna. Obiekt ZamowienieList() to kolekcja formularzy
  117. //pozwala na stworzenie wielu formularzy z jednym buttonem
  118. $zamowieniaList = new ZamowienieList();
  119. foreach ($zamowienia as $zamowienie) {
  120. $zamowieniaList->getZamowienia()->add($zamowienie);
  121. }
  122.  
  123. //[-Formularz Główny-]Główny formularz $form. Struktura to kolekcja formularzy ZamowienieListType()
  124. //a zawartość to $zamowieniaList
  125. $form = $this->createForm(ZamowienieListType::class, $zamowieniaList);
  126.  
  127. //[-Formularz Główny-]Jeśli w panelu zmienionio jakiś status i kliknięto zapisz to odbieram
  128. //zawartość formularza i aktualizuję bazę danych
  129. $form->handleRequest($request);
  130. if ($form->isValid()) {
  131. $em = $this->getDoctrine()->getManager();
  132. foreach ($form->getData() as $task) {
  133. $em->merge($task);
  134. }
  135. $em->flush();
  136. }
  137.  
  138. return $this->render('AppBundle:Zarzadca:panelsort.html.twig',[
  139. 'zamowieniaProdukty'=>$zamowieniaProdukty,
  140. 'sortArr' => $sortArr,
  141. 'form' => $form->createView(),
  142. 'EntFldName' => $EntFldName,
  143. 'query' => $query,
  144. 'Identifier' => $Identifier,
  145. 'StatusForm' => $StatusForm->createView(),
  146. 'DataZamForm' => $DataZamForm->createView(),
  147. 'NrKlientaForm' => $NrKlientaForm->createView(),
  148. ]);
  149. }
  150.  
  151. //jest jeszcze kilka pomocniczych metod do powyższej akcji
  152.  
  153. }