Podpowiedzcie mi, na moich chociażby przykładach, jak powinno najlepiej się podchodzić do tematu.
1. Jeśli mamy Single Responsibility. Rozumiem to tak, że każdy obiekt powinien być tak robity, by poszczególne jego składowe, można było wykorzystywać w różnych sytuacjach. By nie tworzyć funkcji typu GetAll(). Czyli jeśli mam np. klasę Faktury. To dobrze, jest ją rozbić na składowe, które są odpowiedzialne za różne rzeczy. Np.
czy lepiej to jeszcze bardziej rozbijać, np.:
W pierwszym przypadku mam funkcję dedykowaną do szukania faktury SearchInvoice(). W zależności na jakich stronach wyszukuję faktury to piszę zawsze SearchInvoice() i wiem, że ta metoda zwraca faktury. A w drugim przypadku, jest metoda Search() którą mogę wykorzystać do szukania Faktur, ale też do szukania postów, do szukania użytkowników i szukania czegoś jeszcze. W drugim przypadku powstaje duża funkcja, w której jest dużo switch`ów, ale wykorzystywam ją w każdej stronie i nie muszę się zastanawiać co ona robi, a w pierwszym przypadku znowu większa ilość funkcji. Co jest lepsze prawidłowe?
2. Open Closed.
Mamy sytuację, że pobieram fakturę. Czyli lepiej jest tworzyć funkcję np. GetInvoicesById(1) , GetInvoicesTrashed(true, array('11', '22')) i tworzy się w tedy duża ilość funkcji, czyli lepszym będzie funkcja jak wyżej, czyli zawsze jako parametr dawać array (lub object) i wtedy nie trzeba dawać defaultowych wartości np.
function funkcja($zmienna = 1, $limit = 10, $offset = 0, $returnId = true) { }
czy lepiej zawsze się przyzwyczaić i dawać:
function funkcja($params) { //itd..
3. Co to jest encja tak właściwie? Object czyli zbiór metod, funkcje czyli można powiedzieć metody, a encje? to jakaś wartość funkcji, np:
class jakas { private encja1 = '11'; private encjejakas = '22'; //itd... }
4. To już pytanie o Laravela. Jak się powinno fachowo generować podstrony i wykonywać routing. Załóżmy narazie prosty przykład, gdzie jest:
Route::get('/{page}', function ($page, App\User $user, App\Cache $cache, App\Post $post) { switch($PageDataType) { case 'post': $return = new Post->SearchPost(array('slug' => $page'))->GetAll(); break; } return view('pages.'.$page, ['data' => $return]); } // i w templatce np. wyswietlamy dane itd.
Używam laravel 5.1 :-)
Z góry dziękuję za wszelkie wskazówki ;-)
Nikt nic?