czytelnosc kodu, przykład

0

który styl pisania kodu jest waszym zdaniem czytelniejszy i łatwiejszy do zrozumienia?

pierwszy:

public function persist()
    {
      // get current logged in user
      $user = Auth::user();

      //create a new car from validated data
      $car = new \App\Car($this->validated());

      //add car to the user
      $user->cars()->save($car);
    }

czy drugi:

public function persist()
    {
      // create and add a new car to the user
      Auth::user()->cars()->save(new \App\Car($this->validated()));
    }

czy rozbijanie to na 3 rozne linijki jest dobrym krokiem czy lepiej pisac krotko?

oczywiście jest to metoda w FormRequescie, która się wykona gdy walidacja przejdzie itp itd wiec nie muszę się martwic o gruby kontroler itp

0
$car = new \App\Car($this->validated());

$user = Auth::user();
$user->cars()->save($car);

Komentarze są tutaj całkowicie zbędne.

2

Można się pokusić o któryś z tych zapisów (Prawo_Demeter):

$car = new \App\Car($this->validated());
$user = Auth::user();
// w zależności, co ten save reprezentuje w Twojej aplikacji
// $user->purchase($car);
// $user->rent($car);
// $user->inherit($car);

Co z Twoimi wersjami jest nie tak?
 

  1. Zbędne komentarze.
    Widzę, że pobierasz zalogowanego usera.
    Widzę, że tworzysz instancję samochodu.
    Widzę, że zapisujesz samochód.
     
    Komentuj dlaczego, a nie co się dzieje.
     
  2. Takie tasiemce nie są dobre, bo zmniejszają czytelność. Masz 5 wywołań w jednej linii. Ja zazwyczaj ograniczam się do 3.
    Ważna też jest "głębokość" wywołań. W tym wypadku maksymalnie 2, czyli wywołuję funkcję i jako argument może przyjmować jakieś wywołanie ale na tym koniec. Tak nie robimy: $this->foo($this->bar($this->baz()));
// mozna oczywiscie ->compute* wywołać tutaj, to juz kwestia preferencji. 
$foo = $this->getFoo();
$bar = $this->getBar();

// mimo, ze by się pewnie zmieściło w 80, to lubie sobie to pisać od nowej linii, bo DLA MNIE jest czytelniej
$this->doSomethingWithFooAndBar(
    $this->computeSomethingFromFoo($foo),
    $this->computeSomethingFromBar($bar)
);

// tak nie robimy
$this->doSomethingWithFooAndBar($this->computeSomethingFromFoo($this->getFoo()), $this->computeSomethingFromBar($this->getBar()));

1 użytkowników online, w tym zalogowanych: 0, gości: 1