|
Programiranje Java, Perl, VB, ASP, .NET, C, C++, Pascal, Delphi Sponzor: |
|
Alati teme | Način prikaza |
|
29. 01. 2012. | #1 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Mislim da ovde malo mešaš babe i žabe, tj. poistovećuješ "debljinu" sa brojem linija. To što kontroler ima više linija koda od modela ne znači da je "deblji". Pored toga, različiti frejmvorci (i različiti jezici) pružaju mogućnost da se neki kod piše kraće, imaš mogućnost da koristiš razne helper metode itd, tako da isti taj tvoj primer kontrolera:
Kôd:
public function indexAction() { $month = $this->_request->getParam('month'); $year = $this->_request->getParam('year'); $day = $this->_request->getParam('day'); // obrade se podaci i kreira ispravan format datuma $date // eventualno se po potrebi pozovu jos neke funkcije i odrade upiti $event_model = new Application_Model_Event(); $this->view->events = $event_model->getEvents($date); } Kôd:
def index date = Time.parse(params[:date]) @events = Event.get_approved(date) end To takođe zavisi i od toga kako si nazvao i organizovao form elemente, kako si osmislio rute itd, dosta tog "plumbinga" u kontroleru načelno može da se izbegne.
__________________
blog |
"Hvala" jablan za poruku: |
29. 01. 2012. | #2 |
profesionalac
Professional
Datum učlanjenja: 08.11.2010
Poruke: 211
Hvala: 68
78 "Hvala" u 32 poruka
|
Sto se tice slanja $_POST u model, radio sam na kodu gde je slucaj ovakva:
Polja na formi se nazovu isto kao i polja u bazi, i tako da kad se post prosledi modelu moze odmah da se uradi insert(selekt i dr.) jer je niz koji je key => value vec u postu. Sve je secure tu nema sta, al jednostavno nisam za to, jer potencjalni napadac moze da izvuce koliko toliko semu baze, jeste da ne moze nista al mi se to ne svidja. Ako neki junior sutradan treba da nesto dodaje/oduzme radice copy-paste i moguce da ce negde da zajebe nesto. Citljiviji mi je kod ako u kontroleru pripremim post i samo odredjene parametre prosledim u model. |
29. 01. 2012. | #3 |
Goran Pilipović
Sir Write-a-Lot
|
Može neko objašnjenje zašto nikako POST u model? Gde vi radite preveru i sanitizaciju podataka iz POST-a, u kontroleru?
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman I don't always know what I'm talking about but I know I'm right! |
11. 04. 2012. | #4 | |
član
Certified
|
Citat:
Uzmimo recimo primer gde se post koristi u modelu: Kôd:
public function addUser() { $this->db->insert($_POST['username'], $_POST['password'],$_POST['email']); } Kôd:
public function addUser($username, $password, $email) { $this->db->insert($username, $password, $email); } Međutim, da li možeš prvu metodu koristiti da upišeš podatke koji ne dolaze iz POST forme, recimo iz neke migracije koja uzima podatke iz stare baze i upisuje u novu? Ili recimo, možda ćeš želeti da metodu addUser() testiraš kroz unit testove, gde ćeš sam prosleđivati podatke u kodu. Mislim da je ponovna upotrebljivost druge metide daleko veća, za razliku od prve koja je zakucana za POST kontekst. |
|
12. 04. 2012. | #5 | |
Goran Pilipović
Sir Write-a-Lot
|
Citat:
Po meni treba ovako: Kôd:
public function addUser($data) { // $data validacija $this->db->insert(... whatever here .. ); } a ovo sa 17 parametara funkcije ne bih sada komentarisao osim da je to loša praksa
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman I don't always know what I'm talking about but I know I'm right! |
|
"Hvala" bluesman za poruku: |
29. 01. 2012. | #6 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Ne znam šta ti je to "sanitizacija". Konvertovanje parametara iz stringova u štagod treba modelu (npr u datum) obavljam u kontroleru. Logičku validaciju podataka vrši model.
__________________
blog |
29. 01. 2012. | #7 |
profesionalac
Professional
Datum učlanjenja: 08.11.2010
Poruke: 211
Hvala: 68
78 "Hvala" u 32 poruka
|
Ja uglavnom 90% validacije obavljam u kontroleru, jer ako neki podatak nije validan i treba da se izbaci greska sto bi uopste skripta ulazila u metodu iz modela.
|
29. 01. 2012. | #8 | |
član
Certified
Datum učlanjenja: 03.10.2006
Poruke: 96
Hvala: 27
44 "Hvala" u 26 poruka
|
Citat:
Sve ostalo skoro 99% sam siguran vodi ka ruznom kodu i izuzetno smanjenom re-usabilitiju. Validacija u kontroleru mi ima smisla samo ako se radi o nekoj app-wide vrednosti koja nije konkretno vezana za neki model koji ce kasnije postati record u bazi. |
|
29. 01. 2012. | #9 | |
profesionalac
Professional
Datum učlanjenja: 08.11.2010
Poruke: 211
Hvala: 68
78 "Hvala" u 32 poruka
|
Zar ne bi onda bas zbog toga validaciju prepustio kontroleru da ne bi u modelu morao da pises
if(datum1){validacija 1}else{validacija 2} Citat:
Zend koji ima svoju klasu za forme i validacija toga se radi u kontroleru (koliko se secam tako je bilo i u drugim PHP FW). Poslednja izmena od tasmaniski : 29. 01. 2012. u 16:36. |
|
29. 01. 2012. | #10 |
član
Certified
Datum učlanjenja: 03.10.2006
Poruke: 96
Hvala: 27
44 "Hvala" u 26 poruka
|
Kad kazes za Zend - radi se validacija da li mislis na nesto ovako u kontroleru (fiktivni kod ali ovako se slicno radi u Django-u) :
Kôd:
f = MyModelForm(request['POST']) f.validate() if f.is_valid(): MyModel(f).save() else: #prijavi gresku Ako mislis da code validate metode (u ovom slucaju) treba da pripada kontroleru - ne slazem se... mada mogu da zamislim frejmvork koji je tako koncipiran da validaciju vrsi u kontroleru ali mi se cini kao losiji pristup dizajnu od ovog... bar konceptualno. Mesanje ova dva pristupa je svakako lose. |
|
|