Malo vježbam OOP po nekim slučajnim zadacima (zadaci predviđeni za rješenja u C#, ali ja sam ih iskoristio sebi za vježbanje OOP-a u PHPu) i mislim da sam ok napravio.
Međutim nemam koga da mi veli jel valja ili ne valja i zašto ne valja ako ne valja, odnosno gdje postoji mjesto za poboljšanje, govoreći o principima OOP-a.
Molio bih nadležne majstore ( @creatifcode@tony@tpojka@jorgovan ) kao i ostale meštre kada uhvate malko vremena, da bace oko i kažu svoj sud.
Pročit’o sam zahtjev i mislim da trebaš preurediti input. Tamo se kaže da je input samo cifra potrošnje. Što je i logično: recimo da je to forma na sajtu i mene k’o vizitora zanima da unesem samo svoju potrošnju (npr. 3750) godišnjih kilovat sati očekuući da mi forma obradi i eksportuje listu paketa.
S tim u vezi nisi poštov’o SRP (S u S.O.L.I.D.).
Treba da postaviš model koji će prihvatiti samo jednu vrijednost. Neka je to niz ['kWhy' => 3750], a
BasicElectricityTariff klasa treba da obradi takav podatak. Isto tako PackagedTariff klasa treba da prihvata isti input. Obe klase treba da eksportuju uniforman output. Nešto poput
Tako da na nekoj drugoj strani vrtiš foreach, tipa:
$compare[1] = new BasicElectricityTariff(['kWhy' => 3750]);
...
...
...
$compare[5] = new PackagedTariff(['kWhy' => 3750]);
A potom sortiraš ispis za $compare vrijednosti.
Tako nekako bi’ iš’o.
Evo sam ovde započeo kako bi ti modeli trebalo da izgledaju ali nisam završio. Tj treba par stvari prepraviti pa sam ostavio to tebi.
Edit: nisam se bavio strukturom projekta već onim šta bi trebalo da bude odgovornost pojedinih klasa.
Hvala! Danas ću opet napraviti drugu verziju istoga, vodeći se SOLIDom, KISS-om i ostalim pi*darijama.
Što se tiče podataka, oni su (po zadatku) fiksni. Nije predviđeno da bude, recimo,3879 kwh, već odabir od par ponuđenih (3500, 4500, 6000).
Al kužim te.
The comparison should accept the following input parameter:
Consumption (kWh/year)
and create a list of these products with the columns
Tariff name
Annual costs (€/year)
Ako radiš više input podataka istovremeno, to treba da uradiš kroz neki servis a da ova klasa hvata po jedan u momentu. Na taj način možeš da proširuješ funkcionalnost klase tipa ['kWhm' => 350] paonda da vršiš provjeru da li si proslijedio godišnju ili mjesečnu potrošnju (kad se pojavi takav paket u ponudi) ali ti output ostaje uniforman. Nisam siguran ali mislim da bi mi bilo lakše za održavati.
Po mome to bi i trebalo biti u arrayu i tako prosljeđuje u objekt. Međutim, zato i pitah vas meštre jer ne znači da sam i u pravu ako sam si to tako zamislio
Nema veze što imaš više sličnih vrijednosti. Zovi klasu za svaku vrijednost ponaosob.
Ono što sam stavio za BasicElectricityTariff recimo treba da bude minimalni sadržalac za taj paket.
Tj, da može da radi sa jednim podatkom ili sa više (ako treba).
I ja htjedo’ napisati da je moglo kroz branch-ing da se uradi.
U svakom slučaju ovo mi već liči na puno bolji kod od onog inicijalno postavljenog.
Ono što ja ne volim u PHP-u je echo, prije bi’ to uradio sa return json_decode($this->results); a u index.php bi uradio taj foreach. S tim da bi trebalo dodatno formirati elemente meta i consumption. Eventualno upotrijebiti __toString() magic method a isporučiti json_encode niza koji bi im’o strukturu
[
'data' => [],
'meta' => [],
]
Imaćeš opštiji kod i moći ćeš ga lako transformisati u template (view), možda API.
U svakom slučaju što manje (a najbolje nimalo) echo konstruktora po klasama već samo return.
Taj V2 stavih zafrkancije radi (a i još ne kužim branching).
Al dali ste mi ideju da se usput sad poigram i s time
Echo mi uopće ne paše tu, ali obzirom na zadatak, htio sam samo “pustiti” rezultat van. Razumijem primjedbu.
Još ću se poigrat i ponovno napravit još jednu verziju (i pokušat je ugurat u branch).
Kad izmijeniš kod i odradiš sve kako si i dosad, git push će ti reći šta treba da uradiš prvi put umjesto git push (hint: git push --set-upstream origin drugi-naziv-umjesto-master-a, al’ ja to ne pamtim već uvijek kucam git push pa kopiram upozorenje ).
To ako koristiš konzolu umjesto GUI-ja.
Imam instalisane i Github Desktop i Sourcetree ali koristim ih ukupno 10-15% da se darežljivo izrazim.
Nekako sam navik’o ovamo u terminalu već.
Recimo, sad ne bi’ znao naći git stash save ili git stash list na aplikaciji onako iz prve.
Vidim da svi koriste terminal, pa ga i ja koristim. Počeo sam ga (terminal) sve više koristit, što mi je apsurdno ali ajde… Naime generacijama rade grafička sučelja da bi se olakšao rad, i sad, 30 godina nakon DOS-a - opet u command line. Napredak, nema šta…
IDE alati imaju kvalitetne mogućnosti što se tiče gita, recimo jedna od mogućnosti prije commita je ta da si odabereš file-ove koje češ comiitati, a i vidiš koja je bila razlika.
Možeš raditi usporedbu bilo kojeg lokalnog file-a sa istim file-om sa bilo kojeg brancha, naravno , ako je isti projekt.
Štedi vrijeme i novac.