Jump to content
php.lv forumi

MVC struktūra


daGrevis

Recommended Posts

Sveiki,

 

Pameģinašu vēlreiz uzrakstīt Savu MVC "framework'u". Pirmās divas reizes sanāca tā, ka strādāt strādāja, bet gribas mēģināt izveidot ko labāku. =]

Es pamēģināju padomāt un nonācu pie domu grauda, ka tik ļoti MVC jau ieakmeņojušās direktorijas /app/controllers, /app/models un /app/views Man nav vajadzīgas.

 

Tā vietā izveidojam moduļus (apkopojums kontrolierim, modelim un skatam kā viena mapīte, tikai katrai lietai Savs)... T.b....

 

/index.php

/kernel
/bootstrap.php
/c11n.php

/helpers

/modules
/{$1}
	/models
	/views
	/controllers
	/i18n
	/media
		/images
		/css
		/javascripts
/{$2}
	/models
	/views
	/controllers
	/i18n
	/media
		/images
		/css
		/javascripts

/vendors

/cache

 

Teiksim Es vēlētos izveidot blogu. Es moduļu mapītē izveidoju mapīti /blog kura iekšā (visu var redzēt augstāk!) būs viss, kas ir nepieciešams blogam. =]

 

Tad Man radās vīzija, ka tā cietīs abstrakcija (vismaz Es to tā nosaucu). Varbūt cietīs. Ideja ir tāda (kaut ko tamlīdzīgu lasīju Drupal lapā), ka Es nevarēšu izmantot moduļa X apakšlietu modulim Y kā tās apakšlietu (vai vismaz tas nebūtu loģiski).

 

Kādas idejas?

Edited by daGrevis
Link to comment
Share on other sites

1)Tas, ko tu esi uzrakstījis ir mapju struktūra, nevis MVC struktūra. MVC struktūra pēc būtības neko jaunu neradīsi, bet vari variēt ar dažādām niansēm:

a)routing-u - kā no attiecīgā urļa tiks meklēts kontroleris. Vari izmantot reģistru, kurā reģistrēti visi kontroleri, vari route-ēt pēc mapju nosaukumiem, vari izmantot masīvu ar regex-iem, kuriem pretī atbilstoši kontrolieri, ...

b)kā kontrolieri spēj mijiedarboties ar citiem kontrolieriem - HMVC

c)kā tiek atsevišķi apstrādāti ajax pieprasījumi un kā tiek kombinēti ar moduļiem un galveno lapu (Automātiska aizsardzība pret XSRF, utt.).

...

Tas, ko tu esi uzrakstījis ne cik neapraksta neko no šī.

 

2)Aplikācijas failus nevajadzētu likt publiskajā web folderī

3)statisko kontentu izdevīgāk servēt no cita subdomeina un/vai pat citiem serveriem, perfektā gadījumā, no CDN.

Link to comment
Share on other sites

Marci, paldies, ka pateici, ko apskatīt tuvak. =] Kaut kur lasīju, ka daži cilvēki pilnīgi noliek visus pārējos "framework'us", jo, itkā, Symfony vienīgais ir sakarīgi būvēts.

Codez, laikam gan. Vai Tu, lūdzu, varētu Man latviski izstātīt dažos teikumos ko dara īpašu HMVC salīdzinājumā ar MVC un parādīt mazu piemēru? =]]

 

Kāds ir mēģinājis Lithium? ) rATRIJS?

Link to comment
Share on other sites

HMVC nozīme hirarhiāls MVC.

Idejiski tas nozīmē, ka viens kontroleris savas atbildes ģenerēšanā var izsaukt citus kontrolerus.

 

Teiksim ir kontroleris, kurš atbild par sākumlapas ģenerēšanu, bet tu vēlies sākumlapā attēlot kaut kādu aptauju. Šijā gadījumā aptauju tāpat varētu ģenerēt aptaujas kontroleris, bet sākumlapas kontroleris izsauc aptaujas kontroleri un tā uzģēnerēto saturu ievieto savā atbildē. Tā ir izdevīgi darīt, ja, piemēram, kādam citam kontrolerim arī sevī jāievieto tā pati aptaujas funkcionalitāte.

 

 

Runājot par sabiedrisko domu, tad manuprāt visvairāk tiek lietots un slavēts CI.

Link to comment
Share on other sites

Visu nakti domāju par HMVC. <3

 

Un nonācu pie secinājuma, ka tur taču nekas nav, ko darīt lai izveidotu HMVC, nevis MVC, rāmi... Tātad, ko Es neesmu sapratis? Nu nevar būt tik viegli... http://pixi.lv/e60a9

 

P.S. Protams, tas nav īsts "framework's", bet gan izlikšanās, bet ideja ir skaidra. =] Centos komentēt kodu. Cepums Man! xD

 

hmvc.zip

Link to comment
Share on other sites

Ir jau arī zināmi akmeņi, kuri ir veidojot aplikāciju pēc HMVC paterna. Piemēram, dažādu kontroleru mijiedarbība ar moduļiem, ja tie izmanto vai maina vienus un tos pašus datus, lai nebūtu vairāki SELECT-i un UPDATE-i, kuri strādā ar vienu un to pašu informāciju. Lai nerastos šādas performances problēmas, nākas būvēt diesgan gudrus modeļus, kuri māk kešot un menidžet informāciju, kuru izmanto.

Link to comment
Share on other sites

Identity Map paterns risina performances problēmas saistībā ar SELECT-iem, bet ne vienmēr tās atrisina. Teiksim, ja tev vienam kontrolerim vajag 3 laukus no 50 lauku tabulas modeļa, bet otram vajag vienu, tad ar Identity Map nekas cits neatliks kā ielasīt 1.gadījumā visus 50 laukus, lai otrajā gadījumā nekas nebūtu jālasa. Šādā pilnīga 2 kontroleru nodalīšanas abstrakcijā, ir jāuzbūvē ļoti sarežģīts mehānisms, lai izietu ar efektīvāko variantu, viens kverijs, kurš uzreiz pieprasa vajadzīgos 4 laukus priekš abiem modeļiem.

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...