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
class ZarzadcaController extends Controller
{
/**
* @Route("/panel/{findBy}-{Identifier}", name="panelSortFromDetails")
* @Route("/panel/{sortArr}/{orderBy}/{query}/{EntFldName}", name="panelSort")
*/
public function panelsortAction(Request $request,$sortArr=false, $orderBy='idzamowienie', $query=false,$EntFldName=false,
$findBy = false, $Identifier = false)
{
//[-ASC DESC sortowanie-]
//Jeśli pierwszy raz otwieram stronę to tworzę tablicę $sortArr
//i każdy element ustawiam na 'null' poza Numer=ASC
//else
//tworzę tablicę $sortArr każdy element ustawiam na 'null'
//poza klikniętym który zmieniam ASC na DESC i odwrotnie .
/*1*/ if(!($sortArr)){$sortArr=$this->setAllNullNumerASC();}
else{
$sortArr = $this->setSortVar($sortArr);
$sortArr = $this->AscDescChanger($sortArr,$orderBy);
}
//[-Formularze-] Tworzę formularze o strukturze XxxType. Bez zawartości.
$StatusForm = $this->createForm(StatusType
::class,null, array( 'action' => $this->generateUrl('panelSortFromDetails')));
$DataZamForm = $this->createForm(DataZamType
::class,null, array( 'action' => $this->generateUrl('panelSortFromDetails')));
// $DataZamForm = $this->createForm(DataZamType::class);
$NrKlientaForm = $this->createForm(NrKlientaType
::class,null, array( 'action' => $this->generateUrl('panelSortFromDetails')));
// $NrKlientaForm = $this->createForm(NrKlientaType::class);
//[-Formularze-]Jeśli wypełniłem formularz to odbieram zawartość
$StatusForm->handleRequest($request);
$DataZamForm->handleRequest($request);
$NrKlientaForm->handleRequest($request);
//kasuję kilka zmiennych bo nie wiedzieć czemu po wybraniu filtra i zmianie sortowania
//nie reaguje na kolejne filtry
if(($StatusForm->isValid())or($DataZamForm->isValid())or($NrKlientaForm->isValid())){
$EntFldName=false;
$query=false;
}
//[-Filtr-]Sprawdza czy kliknięty był filtr.
//$findBy = 'status' or 'data' or 'klient' or 'all'
// $findBy = $this->findByWhat($StatusForm,$DataZamForm,$NrKlientaForm,$EntFldName);
if(!($findBy)){ $findBy = $this->findByWhat($StatusForm,$DataZamForm,$NrKlientaForm,$EntFldName);}
//[-Filtr-]Jeśli przechodzę z filtra do filtra to kasuję query
if(!($EntFldName)){$query=false;}
//[-Repozytorium-][-Sortowanie-]Najważniejsze. Tworzę repozytorium $zamowienia (wykorzystywane do
//utworzenia tabeli i formularzy panelu) i ustawiam elementy
//tablicy $sortArr.
if($findBy == 'all'){
$temp = $this->zamowienieRepositoryMakerAndSortArrChangerForAll($orderBy, $sortArr);
$sortArr = $temp['sortArr'];
$zamowienia = $temp['zamowienia'];
}elseif($findBy == 'idstatus'){
//jeśli wcześniej użyłem filtrowania a teraz tylko kliknięto zmianę sortowania to
//odbieram poprzednie dane o filtrze w przeciwnym razie odbieram dane formularza filtra
if(!($query)){
if(!$Identifier){
$Identifier = $StatusForm->get('status')->getData();
$Identifier = $Identifier->getIdstatus();
}
$query = 'idstatus = '.$Identifier;
}
$EntFldName = 'idstatus';
/*2*/ $temp = $this->zamowienieRepositoryMakerAndSortArrChangerNotForAll(
$query ,$sortArr, $orderBy);
$sortArr = $temp['sortArr'];
$zamowienia = $temp['zamowienia'];
}
elseif($findBy == 'data'){
if(!($query)){
$od = $DataZamForm->get('od')->getData()->format('Y-m-d H:i:s');
$do = $DataZamForm->get('do')->getData()->format('Y-m-d H:i:s');
$query = "datazlozenia BETWEEN '".$od."' AND '".$do."'";
} else {
}
$EntFldName = 'data';
$temp = $this->zamowienieRepositoryMakerAndSortArrChangerNotForAll(
$query ,$sortArr, $orderBy);
$sortArr = $temp['sortArr'];
$zamowienia = $temp['zamowienia'];
}elseif($findBy == 'idklient'){
if(!($query)){
if(!$Identifier){
$Identifier = $NrKlientaForm->get('idklient')->getData();
$Identifier = $Identifier->getIdklient();
}
$query = 'idklient = '.$Identifier;
}
$EntFldName = 'idklient';
/*2*/ $temp = $this->zamowienieRepositoryMakerAndSortArrChangerNotForAll(
$query ,$sortArr, $orderBy);
$sortArr = $temp['sortArr'];
$zamowienia = $temp['zamowienia'];
}else{
throw new \Exception('Nie można znaleźć zamówień dla '.$findBy);
}
//[-Repozytorium II-]Tworzy zmienną $zamowieniaProdukty wysyłaną do Twiga. Wykorzystywane
//tam do obliczenia sumy i ilości produktów dla każdego zamówienia.
$zamowieniaProdukty= $this->getDoctrine()
->getRepository('AppBundle:ZamowienieProdukt')
->findall();
//[-Formularz Główny-]Ładowanie $zamowieniaList - zmiennej potrzebnej do głównego formularza.
//To kluczowa zmienna. Obiekt ZamowienieList() to kolekcja formularzy
//pozwala na stworzenie wielu formularzy z jednym buttonem
$zamowieniaList = new ZamowienieList();
foreach ($zamowienia as $zamowienie) {
$zamowieniaList->getZamowienia()->add($zamowienie);
}
//[-Formularz Główny-]Główny formularz $form. Struktura to kolekcja formularzy ZamowienieListType()
//a zawartość to $zamowieniaList
$form = $this->createForm(ZamowienieListType::class, $zamowieniaList);
//[-Formularz Główny-]Jeśli w panelu zmienionio jakiś status i kliknięto zapisz to odbieram
//zawartość formularza i aktualizuję bazę danych
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
foreach ($form->getData() as $task) {
$em->merge($task);
}
$em->flush();
}
return $this->render('AppBundle:Zarzadca:panelsort.html.twig',[
'zamowieniaProdukty'=>$zamowieniaProdukty,
'sortArr' => $sortArr,
'form' => $form->createView(),
'EntFldName' => $EntFldName,
'query' => $query,
'Identifier' => $Identifier,
'StatusForm' => $StatusForm->createView(),
'DataZamForm' => $DataZamForm->createView(),
'NrKlientaForm' => $NrKlientaForm->createView(),
]);
}
//jest jeszcze kilka pomocniczych metod do powyższej akcji
}
Ten post edytował porzeczki 2.12.2016, 22:10:23