• 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

Cloud VPS
0 głosów
260 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 (215,050 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 (215,050 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ź 214 wizyt
pytanie zadane 4 maja 2017 w PHP przez niezalogowany
0 głosów
0 odpowiedzi 252 wizyt
pytanie zadane 10 grudnia 2017 w PHP przez Assasz Nałogowiec (30,460 p.)
0 głosów
1 odpowiedź 680 wizyt
pytanie zadane 17 października 2022 w C# przez Freak44 Początkujący (300 p.)

93,482 zapytań

142,415 odpowiedzi

322,761 komentarzy

62,895 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

Kursy INF.02 i INF.03
...