Jump to content
php.lv forumi

Diskusija par OOP iespējām PHP


bubu

Recommended Posts

  • Replies 46
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

codez, ir tāds jēdziens, kā stylebook jeb stila grāmata, kurā ir definēti projektā standartā izmantojamie CSS elementi, kas ir pieejami globālā css failā. Ja tev lapā ir 20 modeļi/viewi kuriem katram ir nepieciešams savs ārējs CSS, tad ir būtiskas problēmas ar projektēšanu vai arī pats projekts ir vienkārši pilnīgas auzas.

 

+ Tu mazliet pārspīlē objektu neatkarību vienam no otra - viss par ko tev ir jāuztraucas, lai news modelis varētu strādāt neatkarīgi no teiksim foruma modeļa servera līmenī kā divas dažādas sadaļas kā arī ievietojot tos vienā kopējā skatā, bet neviens tev neliedz izmantot vienu un to pašu css priekš elementiem šajos dažādajos modeļos.

 

Vēlviena interesanta nianse - CSS/JS normālā gadījumā ir statiski faili, kurus pārlūkprogrammas iekešo pie sevis. Tā kā neba nu katru reizi tev visi tie faili ir jāielādē.

Link to comment
Share on other sites

Kaklz, kad es runāju par ielāde problēmu, tas bija tajos gadījumos, ja viss CSS tiek lādēts uzreiz, vai arī ir 30-60 ārēji faili. Ta'da'gadījumā pirmā lapas ielāde būs pārāk ilga (pie 10 sekundēm), lai arī pecāk protams CSS būs nokašots.

 

Bet par to neatkarību ir tā.

Kāda tad jega taisīt baigo OOP, ja es nevaru projektam pievienot jaunu lapu, izveidot objektu news un citus tā, lai man nav jāuztraucās par to, ka modeļiem atbilstošie CSSi un JSi būs savās vietās?

Un tiem modeļiem ir nevis ārējs CSS, bet vienkārši CSS, kurš starp modeļiem nav vienāds, kas ir pilnīgi reāli un nav nekāda projektēšanas kļūda.

Bet tas vai tas CSS būs ārējs vai kāds, par to mēs tagad diskutējam.

Link to comment
Share on other sites

codez - tu vēljoprojām neesi sapratis, ka css un javascript principā nav nekāds sakars ar tavu servera puses oop. Tie jebkurā gadījumā būs jāraksta atsevišķi, vai nu pie views vai kopējos failos. Un ja tev jālādē 30-60 ārēji faili, tad kaut kas nav kārtībā ar projekta organizāciju.

Ja tev sākotnējā ielāde ir paredzēta ilga, uztaisi tā gmailā - sākumā "loading" strīpa, pēc tam, kad tā aiziet, lieto mierīgi.

 

Un tev mierīgi var būt servera pusē OOP - tu tur vari veidot savu dizainu kā gribi (starp citu, kaut vai ar HTML helperiem) - css - dizains un javascript behaviour tev ir jāatdala pēc iespējas vairāk viens no otra, kā arī no html. CSS jātur atsevišķos failos vēlams.

Edited by Web Developer
Link to comment
Share on other sites

1) html tev ir tieši atkarīgs no tā, ko ģenerējuši tavi neatkarīgie objekti - kā tu to html saliec kopā, tas ir views jautājums. HTMLā jeb Contentā tu saliec visu saģenerēto, ko tev vajag.

2) css ir pilnīgi kaut kas cits - tas ir tikai presentation - tas tev ir jāatdala pēc iespējas no visa html un jāliek atsevišķos failos, kur arī rediģēsi - un views liec norādes uz css failiem.

3) javascript liec neatkarīgi no html un css - to arī ir iespējams izdarīt. Protams, iet runa par lielo vairumu koda.

 

Tavi kontrolleri veic visas dispečera funkcijas un inicializē vajadzīgos views un modeļus pēc pieprasījuma.

Tālāk tavi views ņem no modeļiem datus un atrāda.

Visas daļas ir neatkarīgas viena otra pa lielam, tai pat laikā saistītas - tāpat arī OOP objekti mēs saistīties ar citiem objektiem, bet paši par sevi ir neatkarīgi.

Link to comment
Share on other sites

Tātad ir modeļi A-Z un viņiem atbiltošie uzģenerētie HTML fragmenti HTML_A-HTML_Z, taču šajos HTML fragmentos tiek izmanots JS un CSS, attiecīgi apzīmēsims JS_A-JS_Z un CSS_A-CSS_Z.

Tagad es atveru lapu L1.

Tālāk:

1)Attiecīgās lapas L1 kontroleris atver viewu, kurā savukārt tiek izmantoti nodeikti modeļi (A,K,O,P,...), kuri uzģenerē daļu šīs lapas HTML fragmentu.

vai

2)Attiecīgās lapas L1 kontroleris izmanto modeļus, kuri uzģenerē HTML fragmentus, kurus padot tālāk viewam, lai saliek visu kopā.

Bet tagad šijā lapā L1 ir jāpiesaista izmantoto modeļu A,K,O,P,... CSS un JS fragmenti CSS_A,CSS_K,....,JS_A,JS_K,.....

Jautājums paliek, kā to efektīvi izdarīt, lai:

1)Kods paliktu skaists OOP kods un modeli viegli ar tam piederošo CSS un JS kodu varētu pārnest vai izmantot, kur vien vēlies.

2)Netiktu lapā inklūdoti desmitiem ārēji CSS un JS faili

3)Netiktu desmitām reižu dažādās lapās, kurās izmanto vienu modeli, inklūdots viens un tas pats CSS un JS kods.

Link to comment
Share on other sites

Pamācības:

1) kāpēc tev jāsaista css (kas piederās pie views) ar modeļiem? Tas jau tavs pirmais "neatkarības principa" pārkāpums. CSS un JavaScript piederās pie views tāpēc tas IR Views.

2) sadali savu lapu vairākos views - galvenie un tad attiecīgie pēc pieprasījuma. Viņi neatkarīgi no modeļiem ņem datus sev. Kontroleris vienkārši ir inicializējis un padevis parametrus attiecīgajiem modeļiem. Kontroleris arī atvēris vajadzīgos views. Tāpēc tas ir kontroleris, ka tas visu kontrolē. Tāpēc Views ir Views, kas visu atrāda. JavaScript ir klienta puse, tātad, atrādāmā fīča - Views. Parametrus vari padot kā jau html-veidīgajam views. Modelis tikai satur datus.

Edited by Web Developer
Link to comment
Share on other sites

Modelis tikai satur datus.

1)Šeit jau tā lieta, ko es cenšos pateikt, ka, ja modelis satur tikai datus, tad tas nav tīrs OOP, jo tādā gadījumā šis modelis nav pilnīgi neatkarīgs objekts, bet ir jāpiesaista konkrētam vienam viewam, kurš visu šo modeļu datus pārvērtīs HTMLā. Šādā gadījumā modeli nevarēs tik vienkārši izmantot citā viewā, jo būs jāievieto šijā viewā manuāli papildinājums, kurš pārvērš HTMLā jaunā modeļa datus.

2)Bet, ja, lai panāktu modeļa neatkarību, katram modelim piesaistām savu viewu, tad tik un tā sanāk tas pats, ko es aprakstīju pirmīt, tikai būs neis modelim piesaistītie CSS un JS, bet modeļa viewam piesaistīties CSS un JS un jautājums būtībā paliek tas pats.

Link to comment
Share on other sites

1) modelis varētu saturēt metodes, kas atgriež datus pēc padotiem parametriem. Controller padod parametrus, modelis atgriež datus, views paņem datus no modeļa. Nu viens modelis tev būs, piemēram, viena db tabula vai viena db procedūra.

2) Priekš kam tev katram modelim jāpiesaista noteikts view? Nevari no viena view izmantot vairākus modeļus, vai vienu modeli izmantot vairākos views?

Link to comment
Share on other sites

Es nerunāju par visiem modeļiem, es runāju par tādiem modeļiem, kuriem pēc OOP principiem būtu jābūt neatkarīgiem. Tāds modelis, piemēram, varētu būt userprofilenews, kuram padod user_id, offsetu un viņš, izmantojot sev pievienotu viewu, atgriež uzģenerētu HTML, kurā or piemēram visi jaunumi par lietotāku.

Lai tas būtu pēc OOP principiem, šim modelim būtu jabūt pilnīgi neatkarīgam tā, lai es jebkurā savā lapā varētu ierakstīt šādi:

$usernews new UserProfileNews($id,$offset);

$usernews->output();

un man tiek veiksmīgi izvadīts modeļa HTML, bet tai pašā laikā galvenā viewa HTMLs saņem inklūdā vajadzīgos CSS un JS priekš šī userprofilenews modeļa HTML fragmenta.

Link to comment
Share on other sites

Bet kā tad šis UserProfileNewsView inklūdos galvenajā lapas vievā sev nepieciešamos CSS un JS, tas ir jautājums, kuru es jau uzdodu 10 reizi?

 

<style></style> un <script></script> - inline variantā. Ar style tas pat nav īsti valīdi.

 

Tāpēc jau kuro reizi saku - liec šīs lietas labāk iekš <head></head> tagiem kā external file. Pēc kā iekļaut? Nu izdomā - mazums parametrus var sadomāt, kā atpazīt.

Link to comment
Share on other sites

Ne jau sintaksi tev, Web Developer, codez prasa. Viņš tev jau kuro reizi prasa kā tas tavs views zinās kurus (visus) failus iekļaut. Tur jau tas ne-OOP'iskums parādīsies - cik daudz viņam par visu jāzin (vairāk nekā tīrs view's drīkstētu).

Link to comment
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...

×
×
  • Create New...