Kako izbeći gomilanje koda i kako treba prebaciti biznis logiku u model (Laravel)
Zamislite da imamo neki web sajt koji nudi korisnicima gledanje online filmova. I treba da se doda mogućnost da kada korisnik završi gledanje filma, da se sacuva u bazi da je završio, vreme kada je završio gledanje filma i sledeći put kada dodje na taj film da mu bude prikazan da je odgledan.
Korisnik može da “završi” gledanje filma na dva načina. Na primer tako što klikne na pola filma da je odgledao film ili stvarno kada dođe do kraja, da mu mi automatski zabeležimo da je završio.
Prost primer te tabele bi bio ovakav:
Ime tabele: video_completed
Kolone tabele:
Id, video_id, user_id, completed
Completed je boolean type, moze da bude 0 (nije završio sa gledanjem) ili 1 (završio je sa gledanjem).
Kod u controller-u bi bio sledeći:
$video_completed->completed = 1;
$video_completed->completed_at = now();
$video_completed->save();
E sad zamislite i da treba da ima više polja u tabeli koja treba da se updetuje, to bi već nagomilalo ovaj kod u kontroleru. I pošto korisnik može i sam da klikne da je završio, možda bi se na drugom mestu ovaj kod morao duplirati. Tj sigurno da bi morao.
A možda u bućnosti ćemo morati još negde da kopiramo kako bi uradili istu funkcionalnost.
Kako ne bi dolazilo do dupliranja i kako bi izbegli gomilanje koda i nrepreglednosti, ispravnije bi bilo napraviti metodu u Modelu i prebaciti tamo kod(baš je poželjno da kontroleri budu što pregledniji a logiku raspodeliti, kako bi ispunili i jedan od SOLID principa), a svuda gde nam treba izvršenje njega, pozvati ga samo imenom metode kojom bi ga nazvali. Na primer:
Model:
class VideoCompleted extends Model {
public function completed() {
$this->completed = 1;
$this->completed_at = now();
$this->save();
}
}
I sada gde god nam treba u bilo kom kontroleru u projektu da updetujemo da je korisnik završio sa gledanjem filma, jednostavno ćemo pozvati samo njegovu metodu:
$video_completed->completed();
Ne da smo samo skratili ponavljanje koda, već smo ga napravili da bude pregledniji i razumljiviji i na duže staze lakši za održavanje.
Komentari