• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

bool jako parametr metody - dylemat projektowy

Object Storage Arubacloud
0 głosów
158 wizyt
pytanie zadane 25 lutego 2019 w PHP przez Assasz Nałogowiec (30,460 p.)

Witam,

Mam trochę głupi dylemat: otóż posiadam metodę json(), której zadaniem jest zwrócenie odpowiedniego obiektu JsonResponse. Jeśli do tej metody zostaną przekazane encje, zostaną one domyślnie zserializowane. Jednak chcę, aby ta serializacja była opcjonalna (bo może ktoś chce to zrobić ręcznie, np. przy bardziej kompleksowych danych serializacja domyślna może nie być odpowiednia), zatem metoda wygląda mniej więcej tak:

/**
 * Returns JSON encoded response
 *
 * @param array  $data          Data supposed to be returned
 * @param string $status        Response status code
 * @param bool   $serialization If true, default entity serialization will be applied
 * @return JsonResponse
 */
protected function json(array $data = [], string $status = Response::HTTP_OK, bool $serialization = true): JsonResponse
{
    // jeśli $serialization jest równe true, przekazane w $data encje zostają serializowane
    // serializacja encji jest wykonywana przez klasę EntitySerializer
}
 

I tutaj pojawia się problem: bool jako parametr metody nie jest zbyt dobrą praktyką. Zastanawiałem się nad tym, aby utworzyć stałą, która byłaby używana jako parametr $serialization, np. coś takiego:

bool $serialization = EntitySerializer::OMMIT_SERIALIZATION

Nie jestem jednak pewien, jak to dobrze zaprojektować: czy stała powinna być własnością EntitySerializer? Nie mogę utworzyć stałej dla klasy posiadającej metodę json(), ponieważ jest to trait. Ponadto, czy to powinien być bool, czy coś innego? Czy opłaca się w ogóle tworzyć do tego stałą (a co za tym idzie, importować całą klasę), której wartością byłby po prostu bool? Zostawić po prostu true/false?

Także pytam bardziej doświadczonych kolegów: jak to zrobić, aby było dobrze? :)

2 odpowiedzi

+1 głos
odpowiedź 25 lutego 2019 przez Bosswell Nałogowiec (36,470 p.)
Czyli metoda json() ma serializować dane ale tylko w przypadku odpowiedniego parametru? Bez sensu. Po co masz ją wywoływać, jeżeli danego obiektu nie chcesz serializować? Nie lepiej używać jej tylko wtedy, kiedy to potrzebne?
komentarz 25 lutego 2019 przez Assasz Nałogowiec (30,460 p.)

Metoda json() jest metodą wykorzystywaną przez kontrolery do zwracania zakodowanych w JSON resposnów. Można do niej przekazać różne rzeczy, nie tylko encje.

Np.:

return $this->json([
    // string
    'foo' => 'bar',
    // kolekcja encji, w tym przypadku lepiej zserializowac je ręcznie, ponieważ domyślna serializacja nie sprawi się tu dobrze 
    'entities' => $entities,
    // array intów
    'xyz' => [1,2,3]
], Response::HTTP_OK, false);

// tutaj można użyć serializacji domyślnej
return $this->json([
    'entites' => $entities
]);

 

0 głosów
odpowiedź 25 lutego 2019 przez Ehlert Ekspert (212,670 p.)
Takie parametryzowanie metod to nic dobrego. Rozbij to lepiej na dwie metody. Zniknie problem i parametru i miejsca dla stałej.
komentarz 25 lutego 2019 przez Assasz Nałogowiec (30,460 p.)
Hmm muszę to jeszcze przemyśleć :D Bo kontekst jest trochę szerszy, może nie przedstawiłem go do końca...
komentarz 25 lutego 2019 przez Ehlert Ekspert (212,670 p.)

Załatw to inaczej. Nie przekazuj do widoku encji, tylko dto smiley

komentarz 25 lutego 2019 przez Assasz Nałogowiec (30,460 p.)
edycja 26 lutego 2019 przez Assasz
Tutaj akurat rozpatruję przypadek zwracania danych przez API - przed zwróceniem responsa encje zamieniam na tablice i to właśnie robi EntitySerializer.

EDIT: Rozwiązałem to jednak w inny sposób i obyło się bez parametru.

Podobne pytania

0 głosów
1 odpowiedź 121 wizyt
pytanie zadane 4 maja 2017 w PHP przez niezalogowany
0 głosów
0 odpowiedzi 204 wizyt
pytanie zadane 10 grudnia 2017 w PHP przez Assasz Nałogowiec (30,460 p.)
0 głosów
1 odpowiedź 381 wizyt
pytanie zadane 17 października 2022 w C# przez Freak44 Początkujący (300 p.)

92,575 zapytań

141,424 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...