PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
MVC kasutamine
Postitaja: loll. 2013-09-23 14:56:21
tere,

olen probleemi ees, kuidas Model-it ja Controller-it kasutada

mul on süsteemis dokumendid erineva struktuuriga, andmebaasis on asjad korraldatud nii, et on olemas tabel dokumentide ühisosa kohta ja sõltuvalt struktuurile lisatabelid;

mul on Model dokumendi lisamiseks (class ModelDocumentAdd), sel klassil on public property $id, mis on auto_increment value just lisatud dokumendi kohta


PHP kood:
 
namespace ModelDocument
;

class 
Add {

public 
$id 0;

class 
__construc() {
 
/* ... */
 
$this -> id $auto_increment_value// see ei olegi praegu tähtis, kuidas see number tekib, oluline, et see tekib
}

}


mul on Contoller, näiteks arve loomise jaoks (ControllerInvoiceAdd)


JA NÜÜD JÕUAN KÜSIMUSE JUURDE :)

kas peaks tegema eraldi Model klassi arve lisamise jaoks või paigutada lisamine Controlleri sisse?



PHP kood:
 
// A: kasutan Model klassi arve loomiseks
$params_all_in_one = array(/* lisatava arve kõik detailid */);
$objInvoice = new ModelInvoiceAdd($params_all_in_one);

return 
$objInvoice -> id;


// variant B: kasutan kahte klassi
$params_document = array(/* lisatava arve dokumendi osa detailid */);
$objDocument = new ModelDocumentAdd($params_document);

$params_invoice = array(/* lisatava arve osa detailid */);
$params_invoice['id'] = $objDocument -> id;
$objInvoice = new ModelInvoiceAdd($params_invoice);



ehk siis, kas on mõistlik teha üks mahukam klass Model alla (Variant A), kus toimub dokumendi (arve) lisamine või kasutada juba kord tehtud abstraktset dokumendi lisamise klassi ja teha juurde ainult arve spetsiifiline lisamise klass (variant B) ning kombineerida loogika Controller klassis

tänud mõtete eest




RE: MVC kasutamine
Postitaja: loll. 2013-09-23 14:58:25
paistab, et backslashsiin foorumis ei toimi, namespace on loomulikult nendega eraldatud
RE: MVC kasutamine
Postitaja: Poiss 2013-09-23 15:55:36
Esiteks, ma ei saa aru, miks on Sul selline klass: ModelDocumentAdd
Olgu, oletame, et oled teinud sellise arhitektuuri, kus iga tegevus on eraldi failis ja tegu pole klassikalise OOPga, sel juhul ok. Aga oluliselt paremini kõlaks see, kui oleks Document klass ja selles meetod add. Sõna Model võib, aga ei pea rõhutama, selle saad PHP poolel namespacega ära klaarida... aga mõnele meeldib, kui editoris on näha faili nimes millise kihiga tegu.

Üldine reegel võiks olla see, et kontrollerid on õhukesed ja mudelid paksud. Aga see on kõige rohkem rikutud põhimõte minuarust üldse. Puutun jälle ja jälle kokku mingite projektidega, kus nõutakse 10 aastast OOP kogemust ja kui koodi lahti võtan, siis mudelis tehakse baasipäringuid ja ülejäänud kõik istub kontrollerites.

NIIET VASTUS ON: EI :)
RE: MVC kasutamine
Postitaja: loll. 2013-09-23 16:32:25
TSITEERITUD:
Esiteks, ma ei saa aru, miks on Sul selline klass: ModelDocumentAdd
Olgu, oletame, et oled teinud sellise arhitektuuri, kus iga tegevus on eraldi failis ja tegu pole klassikalise OOPga, sel juhul ok. Aga oluliselt paremini kõlaks see, kui oleks Document klass ja selles meetod add. Sõna Model võib, aga ei pea rõhutama, selle saad PHP poolel namespacega ära klaarida... aga mõnele meeldib, kui editoris on näha faili nimes millise kihiga tegu.

Üldine reegel võiks olla see, et kontrollerid on õhukesed ja mudelid paksud. Aga see on kõige rohkem rikutud põhimõte minuarust üldse. Puutun jälle ja jälle kokku mingite projektidega, kus nõutakse 10 aastast OOP kogemust ja kui koodi lahti võtan, siis mudelis tehakse baasipäringuid ja ülejäänud kõik istub kontrollerites.

NIIET VASTUS ON: EI :)
tänud vastuse eest, kas ma sain õieti aru, et Model peaks olema nagu must kast, mille kohta on teada meetodid ja I/O; ja sõltuvalt projekti mahukusest on neid musti kaste kas väga palju (meetodi põhine) või on neid vähem, aga on mahukad (sisaldavad palju meetodeid);

miks ma meetodipõhist lähenemist eelistasin: maht on reeglina väiksem, seega hoomatavam ja piisab ühekordsest tegemisest (eelnevas näites on tehtud korra dokumendi lisamine valmis ja rohkem sellega ei pea tegelema); samuti paindlikum - saan ühe meetodi asendada teise failiga/loogikaga (mitu klienti erinevate soovidega samas süsteemis), samuti välistan ohu, et mul tekib nn GodClass - teeb kõike ja 50 000 rida

klassi nimi oli toodud koos namespace-ga /Model/Document/Add (backslash siin foorumis ei toimi)
RE: MVC kasutamine
Postitaja: hjk768 2013-09-23 20:52:18
TSITEERITUD:
tänud vastuse eest, kas ma sain õieti aru, et Model peaks olema nagu must kast, mille kohta on teada meetodid ja I/O; ja sõltuvalt projekti mahukusest on neid musti kaste kas väga palju (meetodi põhine) või on neid vähem, aga on mahukad (sisaldavad palju meetodeid);

miks ma meetodipõhist lähenemist eelistasin: maht on reeglina väiksem, seega hoomatavam ja piisab ühekordsest tegemisest (eelnevas näites on tehtud korra dokumendi lisamine valmis ja rohkem sellega ei pea tegelema); samuti paindlikum - saan ühe meetodi asendada teise failiga/loogikaga (mitu klienti erinevate soovidega samas süsteemis), samuti välistan ohu, et mul tekib nn GodClass - teeb kõike ja 50 000 rida

klassi nimi oli toodud koos namespace-ga /Model/Document/Add (backslash siin foorumis ei toimi)


sul peaks ikka olema klass document ja seal meetod add.
head mudeli klassid on nagu APId nt meetod getDocumentyByDateAdded($date), hästi kommenteeritud.
kõik meetodi mis kehtivad sarnaselt paljude mudelite jaoks võiksid olla päritud nt getById() - abstrakses klassis modelBase vmt Ka meetod add/insert võiks olla üldine vajadusel saab alati override teha kui miskit spetsiifilist

selle koha pealt kuhu peaks kirjutama mudeli päringu, mis joinib seostub veel kes teab mitme mudeliga - ei tea Dao klassid ehk mis võtavad endale vajadusel mudelite instantsid ja toimetavad nendega?

toredat lugemist - http://joncairns.com/2013/04/fat-model-skinny-controller-is-



RE: MVC kasutamine
Postitaja: hkj789 2013-09-23 20:57:11
ah sa tahadki just seda abstraktset klassi välistada igal tingimusel - pean paremini lugema õppima.

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0853450298309