Aktywne Wpisy
jedna_odpowiedz +102
#rolnikszukazony Czyli viWaldi zawiózł Annę na randkę, zaparkował w pobliżu stolika z winem i jedzeniem, pogadał z nią w samochodzie o tym, czy Ewka chce miec jeszcze dzieci, po czym odwiózł ją do domu, żeby się mogła spakować? XD To była chyba najlepsza randka w historii programu XD
![jmuhha](https://wykop.pl/cdn/c0834752/9dc031852afc3f36a7321eca44c8536b774871001e4ad40d1656f540126e7fea,q60.jpg)
jmuhha +28
Car może być stworzony (kupiony) tylko jeśli user ma wystrarczającą ilość gotówki, czyli:
if($user->money - $car->price >= 0) {
//user ma wystarczającą ilość gotówki
}else{
//brak gotówki na ten samochod
}
Teraz pytanie: powyższa reguła powinna być umieszczona w validate modelu Car, czy w kontrolerze CarsController@store?
#laravel #php
Entity\Car
– tutaj masz reprezentację samochodu. Przechowuje ona stan i raczej jest powiązana z bazą danych – nie ładowałbym logiki biznesowej (chyba, że robisz #ddd, ale wątpię, więc nie będę Ci mieszać).
Warstwa usług – tutaj ładujesz logikę biznesową. Czyli robisz sobie klasy dedykowane pod zadanie i
if($user->money >= $car->price)
Znalazłem tylko coś takiego: http://forumsarchive.laravel.io/viewtopic.php?id=16046 , ale nie ma tam żadnych skomplikowanych metod, tylko wyświetlanie obiektu :/
i jak rozumiem, w tym serwisie sprawdzam, czy linia ma wystrczające środki i czy nie wybrano zbyt dużej ilosci foteli?
Potem sprawdza czy samolot może być kupiony i zwraca wynik w postaci tablicy np.
array('result' => 'failed', 'errors' => array('Wybrałeś zbyt dużo foteli. Brak miejsca w kadłubie.'))
?
Ja bym to rozwiązał inaczej, stosując zasady solid:
Tworzysz interfejs 'PurchasableInterface' który zawiera metodę getPrice()
Tworzysz serwis 'PurchaseService' który zawiera metodę 'purchase' która przyjmuje implementację interfejsu PurchasableInterface oraz użytkownika i w oparciu o to budujesz kontroler do kupowania. Dalej masz encję Airplane który implementuje interfejs PurchasableInterface, a oprócz tego Repozytorium. W ten sposób masz reużywalny kod.