1.3. Հավաքում ենք մեր PHP ֆրեյմվորկը
Ֆրեյմվորկ կառուցելու շատ տարբեր եղանակներ կան։ Ոմանք նախընտրում են շատ բարդ ֆրեյմվորկներ, ոմանք՝ շատ պարզ։ Մեր հոդվածներում մենք պատրաստվում ենք արագ կառուցել պարզ օգտագործման և պարզ ընկալման ֆրեյմվորկ։
Մեր հոդվածները կօգնեն Ձեզ ստեղծել Ձեր սեփական ֆրեյմվորկը, որը կարող է տարբերվել այն ֆրեյմվորկից, որն անհրաժեշտ է մեզ ինտերնետ խանութ կառուցելու համար։ Դուք հեշտությամբ կարող եք ավելացնել այլ բաղադրիչներ՝ ֆրեյմվորկը ընդլայնելու և ավելի մեծ բան ստեղծելու նպատակով։ Հոդվածաշարի հիմնական նպատակն է սովորել կառուցել սեփական ֆրեյմվորկ ցանկացած CMS-ի համար։
Պատերններ (Patterns)
Ֆրեյմվորկ մշակելու համար օգտագործվում են ծրագրային նախագծման օրինակելի շաբլոններ՝ պատերններ։ Պատեռնը ծրագրավորման մեջ տարածված խնդիրների լավագույն լուծումների համակցությունն է։ Այս շարքում մենք օգտագործելու ենք հետևյալ պատերնները՝
- Մոդել-Տեսք-Կառավարիչ (MVC, Model-View-Controller)
- Ռեեստր (Registry)
- Եզակի դաս (Singleton)
Մոդել-Տեսք-Կառավարիչ (MVC)
MVC-ն մեր ֆրեյմվորկի հիմքն է։ Այն թույլ է տալիս տարանջատել օգտատիրոջ ինտերֆեյսը և ծրագրի տրամաբանությունը։ Տեսքը (View) կապվում է մոդելի (Model) հետ՝ կառավարիչի (Controller) միջոցով, որը պարունակում է տվյալների կառավարման բիզնես տրամաբանությունը։
Օրինակ՝ երբ օգտատերը սեղմում է «Ավելացնել զամբյուղ» կոճակը, կառավարիչը (controller) մշակում է հարցումը, փոխազդում զամբյուղի մոդելի հետ և ավելացնում ապրանքը։ Վերջում կառավարիչը ստանում է մոդելից արդյունքը (օր.՝ ապրանքների քանակը) և թարմացնում տեսքը։
Մենք կկառուցենք մեր սեփական ֆրեյմվորկը և այն կթողնի հնարավորություններ՝ ընդլայնվելու։ Ինչպես նշվեց՝ տվյալները ներկայացվում են մոդելների միջոցով, որոնք պահվում են տվյալների բազայում։ Քանի որ մոդելների դաշտերը համընկնում են բազայի աղյուսակների հետ՝ մենք կարող ենք ընդլայնել MVC դիագրամը։ Արդյունքը արտացոլվում է View-ում՝ որպես բրաուզերի ելք։
Ռեեստր (Registry)
Ռեեստրը թույլ է տալիս ֆրեյմվորկի բոլոր օբյեկտները պահել մեկ տեղում։ Ռեեստրի անհրաժեշտությունը պայմանավորված է MVC պատեռնի աբստրակցիայով։ Յուրաքանչյուր controller և model (օրինակ՝ ապրանք, զամբյուղ, էջ) պետք է կարողանան կատարել ընդհանուր գործողություններ, ինչպիսիք են՝
- Տվյալների բազայի հարցումներ
- Ստուգել՝ արդյոք օգտատերը մուտք է գործել
- Տվյալներ փոխանցել view-ին (շաբլոնների կառավարում)
- Էլ․ փոստի ուղարկում (օրինակ՝ պատվերի դեպքում)
- Ֆայլային համակարգի հետ փոխազդեցություն (օր.՝ ապրանքի նկարների վերբեռնում)
Շատ ֆրեյմվորկներ այս ամենը իրականացնում են հատուկ օբյեկտների միջոցով։ Ռեեստրը պահում է այդ օբյեկտները։ Ռեեստրին կարելի է հասնել ֆրեյմվորկի ցանկացած մասից։ Ստորև՝ նրա դիագրամը․
Ֆրեյմվորկը անմիջապես շփվում է ռեեստրի հետ՝ մնացած օբյեկտներին մուտք տալու համար։ Ռեեստրի ներսում օբյեկտները նույնպես կարող են շփվել միմյանց հետ՝ օրինակ՝ շաբլոնների կառավարիչը կարող է կապ ունենալ ֆայլային մենեջերի հետ։
Եզակի դաս (Singleton)
«Singleton» արտահայտության հայերեն համարժեք գտնելը դժվար է, ուստի մեր հոդվածներում այն կկոչենք «Եզակի դաս», թեև պրակտիկայում այն հաճախ պարզապես թողնում են անգլերեն։
Եզակի դասը ամենապարզ պատեռններից մեկն է։ Նրա նպատակն է երաշխավորել, որ տվյալ դասից գոյություն ունի միայն մեկ օրինակ։ Սա անհրաժեշտ է, երբ պահանջվում է գլոբալ հասանելիություն, օրինակ՝ միայն մեկ տվյալների բազայի կապ՝ ամբողջ ծրագրի համար։
Այն օգտագործվում է, երբ այդ դասը ունի մեկ պարզ առաքելություն՝ օրինակ, ԲԴ-ի հետ կապ ապահովել։
Ընդհանուր կառուցվածք
Հաջորդ քայլը՝ ֆրեյմվորկի կառուցվածքի պլանավորումն է։ Մենք պետք է ունենանք կառուցվածք՝
- Մոդելների համար
- Տեսքերի համար (այսպես կարող ենք տարբեր դիզայններ կիրառել)
- Կառավարիչների համար (յուրաքանչյուր controller կպահենք առանձին պանակում)
- Ադմին կառավարման controller (քանի որ սա նաև CMS է)
- Ռեեստրի համար
- Ռեեստրի օբյեկտների համար
- Ներբեռնվող ֆայլերի
- Արտաքին գրադարանների
- Այլ կոդի
Ըստ այս կառուցվածքի՝ մեր ֆրեյմվորկի պանակները կլինեն հետևյալը (պատասխանելով PHP-ի ընդունված կառուցվածքին՝ անգլերեն անվանումներով)․
- Models
- Views
- View A
- Templates
- Images
- JavaScript
- Controllers
- Controller A
- ControllerA
- ControllerAAdmin
- Controller A
- Registry
- Objects
- Database objects
- Assets
- Uploads
- Կզարգացնենք, երբ ապրանքներ և նկարներ ավելացնենք ֆրեյմվորկին։
- Libraries
- Miscellaneous