Jump to content
php.lv forumi
Sign in to follow this  
daGrevis

Kur ir jāatrodas validācijai?

Recommended Posts

Scenārijs tāds:

 

Es veidoju autorizācijas sistēmu (ielogošanās, izlogošanās, reģistrēšanās utml.). Lūk ir kontroleris, kuram ir metode action_signUp(). Šī metode attiecīgi izsauc validācijas objektu un pārbauda visu, kas pirms tam tika atsūtīts no formas (CSRF tokens, garums lietotājvārdam, īsums parolei, izskats e-pastam utml.). Ja kaut kas nav kā vēlos, tad tiek parādīti "error'i"; ja, tomēr, viss ir labi... izsaucam modeļa metode, piemēram, signUp(), kas nokešo paroli un ar "Query builder'a" palīdzību ieliek jaunos datus datubāzē.

 

Viss strādā! Viss mierīgi un labi.

 

 

Tad Man pateica, ka validācija ir jāsadala gan pa kontroleri, gan pa modeli. Tad, maģiskā veidā, ja tomēr vienā no tiem ir kāds validācijas "error's", visus "error'us" savākt un parādīt.

 

Scenārijs #2, pirmais cēliens:

 

Es pēc divarpus mēnešiem izdomāju, ka gribu kontroles-paneli. Tur izdomāju izveidot "lietotāju menedžeri", kuram viena no iespējām ir pievienot jaunu lietotāju (no turienes kā adminam). Tā kā Mēs visi mīlam DRY filozofiju... šis te viss ir jāpadara "re-usable". Kāpēc gan neizmantot veco-labo metodi no tā modeļa? Nu lūk. Tad laikam kāds ir izdomājis, ka vajag izmantot arī veco validāciju... bet tā kā, iespējams, ne visa validācija, kas bija vecajā kontolerī, ir vajadzīga... sākās problēmas un te Es beidzu saprast par to, ko runāju.

 

Vai tā vajag darīt? Vai tā vajadzētu darīt? Ja jā, tad kā?

Share this post


Link to post
Share on other sites

>>Tad Man pateica, ka validācija ir jāsadala gan pa kontroleri, gan pa modeli.

Ja vienkārši pateica un nekādi nepamatoja - droši ignorēt. Nav viena superpareiza veida kā dalīt kodu starp modeļiem un kontrolieriem.

 

>>ka vajag izmantot arī veco validāciju... bet tā kā, iespējams, ne visa validācija, kas bija vecajā kontolerī, ir vajadzīga

Yii šādos gadījumos izmanto modelim mainīgo scenario, katram var izveidot savādākus validācijas rūļus. Citos freimworkos gan jau ka ir līdzīgi.

Share this post


Link to post
Share on other sites

Skaidrs. Būtu jauki, ja te daudzi Savas doma izteiktu...

Share this post


Link to post
Share on other sites

Piebilde. No pieredzes - labs kods ir īss, saprotams un viegli lasāms bez komentāriem (ja man kaut kur sanāk kaudze ar ieliktiem nosacījumiem vai garas rindas ar daudziem operatoriem utt, uzreiz zinu ka neesmu visu kārtīgi izdomājis).

Aptuveni novērtē vai koda sadalīšana starp modeli un kontrolieri saīsinās un novienkāršos kodu, ja jā tad pārraksti.

Share this post


Link to post
Share on other sites

Novienkāršos? Nē. Padarīs kodu nedaudz vairāk izmantojamu? Jā.

Share this post


Link to post
Share on other sites

Ieteikums

godīgi sakot domāt ir labi bet vel labāk ir to uz papīra uzīmet vai uzrakstīt ko vēlies un sākt veidot un pakāpensiki attīstīt faktiski !

 

Privāts Stāsts no savas praktikas un ikdienas kura iet vel :)

Es sāku rakstīt savu cms motoru bāzējoties uz tīra papīra lokses un idejām šadi ari vis top un pakāpesniski attīstās tālāk tas ari vis patlaban ir diezgan padarīt platforma ir pāri pa 60% pabeigta un galvenās fukncijas faktiski lielākā daļa ir uztaisītas tāka vis iet protams vienam pašam viegli neies daudz skēršļu būs bet tieši tāpec ari to sauc par pieredzi un to labo Seno frāzi No Kļudām Mācāmies bet tiekas neko nedara neko neiemācas jo kļudas nerada jo tikai gaisā mētājas :) tāka vēlu teu veiksmi :) !

Share this post


Link to post
Share on other sites

Ko, lūdzu? Kādu pāpīru? Es labi zinu, ko vēlos panākt.

Share this post


Link to post
Share on other sites

teorētiski, ja neesi fw izstrādātājs, tad kotrolierī līst nevajadzētu.

Share this post


Link to post
Share on other sites

Nē, Tu ko smagi jauc. Tas ir MVC. Kas ir MVC? Model-View-Controller, kur Tu mainot šos trīs komponentus iegūsti aplikāciju, kas ir viegli pārvaldāma. Nevajadzētu līst "system" mapītē, kura satur sistēmas klases, bet tā vietā, ja vajag, Es tās varu izmainīt Savām vajadzībām (ar "extends" atslēgvārdu).

Share this post


Link to post
Share on other sites

Šādiem gadījumiem labi noder Strategy paterns.

 

Tev teiksim ir validācijas funkcija vai klase, kur par parametriem nodod nevis datus, bet gan algoritmus kopā ar parametriem.

Precīzāk tev ir abstrakta klase Validation_Method, kura nosaka kā jāizskatās validācijas metodes klasei.

Tālāk tev ir klase Validator, kura māk validēt datus, izmantojot klases, kuras būvētas uz Validation_Method pamata.

 

Validācijas metodes savukārt

class Validation_Email extends Validation_Method{
}

 

Tālāk, validācija aptuveni

 

Validator::validate($data, new Validation_Email($options1,$option2));

 

Ja tev pēkšņi vajag nedaudz uzlabotu email validātoru, kurš pārbauda papildus parametrus, bet iepriekšējo kodu negribi mainīt, un gribi izmantot jau esošo, vienkārši papildini Validation_Email klasi.

 

class Validation_Email2 extends Validation_Email{
}

 

un izmanto

 

Validator::validate($data2,new Validation_Email($option1,$option3,$option4));

 

Šādā veidā tev nevajadzēs iejaukties ne Validator klasē, ne esošajās Validation_Email klasē, kuru jau izmanto citās koda daļās, tai pašā laikā tu varēsi izmantot jau esošos Validation algoritmus, tos ekstendojot un pieliekot vajadzīgo funkcionalitāti.

Share this post


Link to post
Share on other sites

bet tieši tāpec ari to sauc par pieredzi un to labo Seno frāzi No Kļudām Mācāmies bet tiekas neko nedara neko neiemācas jo kļudas nerada jo tikai gaisā mētājas

Ir tāds teiciens:

Muļķis mācās no savām kļūdām, gudrs - no citu.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...