Zadejte hledaný výraz...

Prosím o kritiku skriptů

php student
verified
rating uzivatele
20. 6. 2011 18:25:05
Dobrý den
nedávno jsem dospěl k bodu, kdy jsem si řekl, že bych se mohl naučit psát MVC, nebo spíše Model2 (jak je ctěná libost) aplikace. Však jsem tu i žádal o nějaké prameny.
Nuže napsal jsem si velmi komplexní aplikaci - kalkulačku, která umí sčítat, odčítat a násobit. Zde předkládám kód a prosím o kritiku, ale nerad bych skončil s brekem pod postelí :-). A ano, vím že je poněkud úsměvné psát to v mvc když by jinak stačily tak 3 řádky. Ale nějak jsem začít musel. Popravdě samotný princip MVC už se mi zdá naprosto zřejmý, jen ho ještě správně implementovat.
index.php:
require('model.php');
require('controller.php');
require('view.php');
?>
VIEW

mvc aplikace - kalkulačka

Sčítačka
Odčítačka
Násobička
$form = <<
FORM;
if(isset($_GET)){
echo $form;
}
?>

CONTROLLER
$print_res = NULL;
if(isset($_GET)){
$op = $_GET;
switch($_GET){
case "plus":
$choose = "Vybrali jste sčítání";
break;
case "minus":
$choose = "Vybrali jste odečítání";
break;
case "multiplication":
$choose = "Vybrali jste násobení";
break;
}
}else{
$op = NULL;
$choose = "Nebyla vybrána operace";
}
if(isset($_GET) && isset($_GET)){
$n1 = $_GET;
$n2 = $_GET;
$answ = new HardCoreMath($n1, $n2);
switch($_GET){
case "plus":
$answ->plus();
$print_res = "Výsledek: ".number_format($answ->plus_result, 3 , ',' , ' ');
break;
case "minus":
$answ->minus();
$print_res = "Výsledek: ".$answ->minus_result;
break;
case "multiplication":
$answ->multiplication();
$print_res = "Výsledek: ".$answ->multiplication_result;
break;
}//switch
}
?>
MODEL
class HardCoreMath{
public $number1;
public $number2;
function __construct($number1, $number2){
$this->number1 = $number1;
$this->number2 = $number2;
}//__construct
function plus(){
$this->plus_result = $this->number1 + $this->number2;
}//plus
function minus(){
$this->minus_result = $this->number1 - $this->number2;
}//minus
function multiplication(){
$this->multiplication_result = $this->number1 * $this->number2;
}
}//Hard_Core_Math class
?>
20. 6. 2011 18:25:05
https://webtrh.cz/diskuse/prosim-o-kritiku-skriptu/#reply647350
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
22. 6. 2011 18:51:11
V duchu mvc model2 by ale model mel obsahovat "vysledek" a nemel by ho vracet, controller by nemel vybirat "textovou hlasku", muze ten text maximalne prelozit - ikdyz i to je nekde mezi view a controllerem, ale opet by mel byt na modelu.
Jinak to vypada celkem spravne - controller rozhoduje, co se zavola, model to provede a view to zobrazi.
A ano, je to naprosto zbytecne, protoze hlavni smysl rozdelovani na 3 vrstvy je v tom, ze je lze lehce vymenit - jine zobrazeni, jiny model, jine "osetrovani" requestu, coz se vetsinou nedeje a mame jenom jedno "view" pro kazdy model, jenom jeden model a jenom jeden zpusob osetrovani requestu.
22. 6. 2011 18:51:11
https://webtrh.cz/diskuse/prosim-o-kritiku-skriptu/#reply647349
php student
verified
rating uzivatele
22. 6. 2011 22:06:54
Takže jestli správně rozumím, tak řádek:
$print_res = "Výsledek: ".$answ->minus_result;
a celý ten první switch by neměl být v controlleru ale v modelu, že?
Trochu mi ale není jasné to že "model by měl obsahovat výsledek, ne ho vracet". Mohl byste mi to prosím osvětlit?
Jinak mockrát děkuji.
22. 6. 2011 22:06:54
https://webtrh.cz/diskuse/prosim-o-kritiku-skriptu/#reply647348
hm
verified
rating uzivatele
(20 hodnocení)
22. 6. 2011 22:22:18
radek o kterem pises bys naopak mel byt ve viewu (samozrejme rovnou vypis, zadne prirazovani uz neni potreba), z controlleru do viewu posles promenne, view pak doplni vsechno ostatní, to že vypisujes do promenne uz rovnou cely text "Výsledek: x" se okradas o moznost udelat view napriklad multijazycny (at uz budes nacitat pro kazdy jazyk jiny view nebo do viewu nacitat podle jazyku jine stringy, ktere budes nekde kumulovat)
ackoliv jde o to ja to mysli vedouci, me to totiz prijde spravne tak, ze controller zavola potrebne veci v modelu, posle viewu a ten uz pouze zobrazuje, texty celkove pak by meli byt na viewu, controller by mel posilat teoreticky surova data...
ale nepovazuji se za zadneho odbornika, treba me vedouci zas vyvede z omylu :) (to on umi :D )
22. 6. 2011 22:22:18
https://webtrh.cz/diskuse/prosim-o-kritiku-skriptu/#reply647347
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
23. 6. 2011 02:09:15
Vzdycky jde o pohled na vec - budto se na kalkulator muzes divat jako na request-response bezstavovou vec a pak bude controller opravdu volat model a predavat do view navratovou hodnotu - pak ale defacto programujes ve funkcionalnim stylu - vracis a nic nedrzis.
Ale da se na to ale taky divat jako na stavovou entitu - a pak by to vypadalo takhle:
K nahlednuti to bezi tady: http://codepad.viper-7.com/pLQU5X
Jak vidite, je to s prominutim sracka, 200 radku, 4 tridy, spousta getteru a setteru, atd. - ale tohle se povazuje za Model2 architekturu - controller zna model, na zaklade requestu zavola nejakou metodu a vybere view a nasledne ho jenom zobrazi.
mohlo by se zdat, ze v kohane to funguje jinak - ze controller ziskava model, ale to je zkreslene, modelem je totiz v tomto pripade ORM - to, ze si vytahnu radek a ze nemam samostatny controller pro ten radek, to uz je vec druha.
a treti vec je, ze model je v kohane globalni - ORM::factory("xxx") - fuj, fuj, fuj :)
cele se to da dost podstatne zjednodusit, ale o tom zase nekdy priste ;)
23. 6. 2011 02:09:15
https://webtrh.cz/diskuse/prosim-o-kritiku-skriptu/#reply647346
Pro odpověď se přihlašte.
Přihlásit