السبت , ديسمبر 7 2019
الرئيسية / تدوينات برمجية / شرح Design patterns و PHP MVC Frameworks

شرح Design patterns و PHP MVC Frameworks

بسم الله الرحمن الرحيم

عندما كنت في ١٦ من عمري أعجبت ببرنامج إدارة محتوى مشهور حينها يسمى phpnuke يعتبر من أشهر CMS سابقاً قبل ظهور الووردبريس و جوملا وغيرها , على كل حال كنت اقضي ساعات كثيرة في تفحص اكواد هذا السكربت وفي الحقيقة لم اكن افهم جميع ما كان موجود في ملفات السكربت وفي الوقت ذاته كنت متعجب كيف ان يكتب شخص بهذا الترتيب ولا ينسى اي ميزة مهمه وايضا , كيف قام بتجهيز جميع الكلاسات الرئيسية وبعدها قام بوراثتها و استخدامها في كثير من الاماكن الاخرى في السكربت , ربما البعض يقول عادي جداً ممكن كاتبة جميع الكلاسات و الترتيبات وبعدها اقوم باستخدامها وانا اقول حسناً ولكن ماذا اذا كان هناك ١٠٠ مطور يعملون معك فهل تشرح للجميع وايضاً لو كان هناك مطور اضافي جديد هل يجب عليه اعادة قراءة جميع ما قمت بكتابته سابقاً من اجل تطوير ميزة بسيطة ؟! حقاً كنت اتساءل ! هذا مجرد مثال واحد من بين عشرات الامثلة الاخرى التي مررت بها .

 

بعد الكثير من التساؤولات  قررت ان ابرمج مجموعة كلاسات و اضعها في مكتبتي البرمجية على حساوبي و استخدمها في كل مشروع اريد برمجته بحيث يسهل اعادة تحديث الكود و اتذكر انني قمت ببرمجة مكتبة تخص صلاحيات المستخدمين و تسجيل الدخول و الخروج , و استخدمتها في اكثر من ٤ مشاريع تجارية قمت ببيعها ولكن ما لم اتصوره ان صديقي ابلغني عن وجود ثغرة بسبب خطأ في الكود الذي كنت استخدمه فرجعت اراجع الكلاس المسؤول عن هذه العملية و فعلاً وجدت الخطأ و اغلقت الثغرة و بعدها استبدلت الكلاس المحدث في جميع المشاريع الاخرى . حسناً الى هنا ما علاقة الموضوع بالعنوان ههه  :mrgreen:  العلاقة يا عزيزي القارىء انني اعدت البحث مرة اخرى عن مكتبات جاهزة تقوم بعمل اشياء اخرى مثل رفع الملفات والى اخره الى ان وصلت الى مفهوم يسمى MVC وهو اختصار لـ Model View Controller وهنا سوف اتحدث عنه بالتفصيل الممل وكيف يغير حياتك كمبرمج !

 

 

  • اولاً : شرح مفهوم Software Design Patterns

في الحقيقة لم اتعلم هذا بعمق الا من الجامعة , لأني لم اكن اواجه المشكلة التي تجعلني افكر في هذا المنطق , على كل حال درست اكثر من ٣ مواد متخصصة في OOP من البداية الى المتقدم ومن ضمنها طريقة تصميم Desing Patterns وانا على يقين انك الى الان لم تفهم ماذا اقصد بـ Desing Patterns  😀 دعني اوضح لك المشكلة لكي تفهم هذا المنطق ببساطة :

في الواقع هذا المفهوم في علوم الحاسوب و خصوصا البرمجة يعني مجموعة من الخبراء اتفقوا على قوانين معينة لتنظيم اي مشروع برمجي وهذا يعني : خبراء لديهم الخبرة الكافية من خلال سنوات العمل ومن خلال المشاكل التي كانت تواجههم قررو ان يضعوا أفضل طريقة لتنظيم المشروع البرمجي وبالتحديد  اي مشروع مبني على OOP (البرمجة الكائنية : كلاسات وغيره) بحيث قالوا بما ان نحن واجهنا مشاكل عديدة مثلا في توزيع ملفات البرنامج و ايضا في اسماء ملفات الكود وفي طريقة اعطاء اسم للكلاس و في طريقة حفظ لكلاس والخ , سوف نقوم بعمل مناهج تنظم هذا الشيء وكل منهج متخصص في انواع معينه من المشاريع مثلا :

😎 هذا مثال فقط وليس حقيقي لكي ابسط الفكرة

المنهج الاول متخصص للمشاريع التجارية التي فيها مثلا مالية

المنهج الثاني متخصص للمشاريع التعليمية التي فيها تسجيل وغيره

وهكذا واطلقوا على هذه المناهج مفهوم Design patterns وبالمناسبة هذه مجرد مناهج تستطيع الاستغناء عنها ولكن لو كنت تتبع منهج محدد في جميع مشاريعك سوف تجد انك منظم للغاية والشركات الكبيرة في البرمجة غالبا تستقطب مهندسين ذو دراية بهذه المنهاج .

 

  • استخدامات Desing patterns

تستخدم هذه المناهج في بيئات التطوير المتشابهه , على سبيل المثال يوجد لدي ٢٠٠ مطور وأنا مدير المشروع , سوف اجبر جميع المطورين على اتباع منهج معين وهذا يساعدهم في فهم تركيبة المشروع بطريقة سريعة دون السؤال عن كل ملف , ايضاً هناك بعض المناهج التي تصلح لـ وضعيات معينه في الكود مثلا , يوجد لدي برنامج بنكي وفي هذا البرنامج كلاس يخص الزبون هذا لكلاس لا اريد انشاء منه الا Object واحد فقط وهذا لكي لا يتم استخدام لكلاس من قبل برامج اخرى مرتبطة بنفس النظام وتغير قيمة في حساب الزبون , لذلك في هذه الوضعيه ممكن استخدام Singletone Desing pattern وهذا فقط مثال من بين عشرات الامثلة لك ان تتخيل !

 

  • مفهوم MVC

كما ذكرت ان هناك العديد من المناهج ولكن ما اريد ان اركز عليه هو المنهج الذي يسمى MVC وهذا مشهور جداً والدليل على ذلك ان شركة MicroSoft تعمل عليه لو لاحظت في ASPX سوف تجد المفهوم هذا موجود لديهم وايضا في لغة السي شارب تستطيع استخدام MVC . ولكن ماذا يعني بالتحديد هذا المفهوم وما فائدته لي كمطوّر اعمل لسنوات بدون تعلم هذه التفاهات و التقسيمات كما يسميها البعض .

😎 هنا يبدأ محور التدوينة ,  ببساطة MVC يعني انك تقسم ملفات البرنامج و الاكواد الى ٣ اقسام

اولا ً Model : هذا المجلد تضع فيه جميع الكلاسات الخاصة بالبيانات : مثلا ملفات قواعد البيانات او قراءة ملفات معينة المهم اي شيء يتحوي على بيانات

ثانياً : View : وهذا المجلد تضع فيه اي شيء يظهر للمستخدم , بعبارة اخرى تصميم البرنامج او Front-End مثلا : الصور , اكواد HTML اذا كان ويب , وملفات CSS

ثالثاُ : Controller : هذا المجلد تضع فيه الــ Logic ويعني ان هذا الملف سوف يتصل بـ Model و بعد ان يقوم بالعمليات يتصل بـ View للعرض , بعبارة اخرى هو المتحكم الوسيط بين Model & View

 

انظر الى هذه الصورة بتمعن :

 

حسناً هنا نرى ان Controller موجود في الاعلى يتحكم بكل ما يطلبه View من Model , تذكر ان المستخدم النهائي سوف يكون مطلع على View لأنه يحتوي على صفحات HTML وغيره ويصل اليها عن طريق Controller  😯  اتمنى انك فهمت ما اقصد !

 

  • شرح Frameworks

حسناً الآن فهمت معنى Design pattern دعني انقلك الى مفهوم آخر وهو Framework , وانا متأكد انك سمعت بهذه الكلمة سابقاً ببساطة ترجمة هذه الكلمة الى العربية هي ” إطار عمل ” وكما تعودنا في هذه المدونة انا لا احب التعاريف الجامعية لذلك سوف اعرف لك هذا من مفهومي الشخصي

معنى Software Framework : مجموعة من المكتبات مرتبة بترتيب معين ومرتبطة بطريقة معينة مع بعضها بحيث تسهل الوصول اليها من خلال استدعاء Framework فقط .

وبعبارة اخرى لو نظرت الى اي برنامج سوف تجد ان البرنامج عبارة عن :

– كود من كتابة المبرمج  ويحتوي على

 – مكتبة ١ يستدعيها مثلا مكتبة الوقت

– مكتبة ٢ يستدعيها مثلا مكتبة الرياضيات

لو جمعت المكتبة الاولى و المكتبة الثانية في مكتبة واحدة تستطيع ان تقول Framework ولكن في مفهوم Software engineering ان يكون هناك مئات المكتبات التي تؤدي وظائف مختلفة مجمعة في مكان واحد يسمى Framework وتستطيع القاء نظرة على احد اكبر Framework والاشهر وهو .NET

حسناً , نعود الى محور التدونية الان يجب ان نبحث عن اطار عمل للغة PHP يحتوي على جميع الخصائص التي يحتاجها اي مبرمج ومتربة بطريقة MVC الذي شرحته سابقاً .

 

 

  • تطبيق MVC على PHP

انا احب التطوير في PHP لذلك سوف اطبق هذا المفهوم على هذه اللغة ولأنها ايضاً بسيطة على كل حال  😆  لو حاولت تطبيق هذا المنهج  برمجيا سوف تحتاج الى كلاسات تدير قواعد البيانات و كلاسات تربط View مع Controller وايضا سوف تحتاج الى Template Engine وتحتاج الى تنظيم جميع الملفات بطريقة صحيحة ولكن دائماً إبدء من حيث انتهى الاخرين ولا داعي لتكرار العمل مرتين , لأنهُ يوجد الكثير من PHP Frameworks قوية و آمنة الاستخدام ومشهورة تستطيع استخدامها لبناء جميع انواع المشاريع ولو كان فيها نقص معين تستطيع ان تكمله .

  • بعض PHP MVC Frameworks

فكر في اي نظام قمت ببرمجته باستخدام PHP سوف تجد ان هناك اشياء اساسية موجودة في اي نظام , مثلا :

– تسجيل الدخول

– تسجيل الخروج

– نظام المستخدمين

– رفع الصور

– لوحة تحكم

– تعدد اللغات

وغيرها من الاشياء الاساسية التي تتكرر في اي نظام . لذلك يجب ان يكون لديك Framework يحتوي على جميع هذه الخصائص التي تحتاجها و ايضاً آمن , لا داعي للبحث لأني قمت بذلك عوضاً عنك .

في السنوات ٤ الاخيرة كنت اعتمد على إطار عمل اسمه Codeigniter

وبصراحة هو إطار عمل مميز ويحتوي على أغلب الخصائص الاساسية التي يحتاجها اي مبرمج في اي برنامج , ولكن لاحظت ان هذا الاطار اكثر تخصيصاً لـ المشاريع التي تكون مميزة يعني لا يوجد لها مثيل في السوق وايضا تحتوي على اضافات مخصصة يتطلب برمجتها  بعبارة اخرى very good for customization لأنه بسيط في البنية و ايضا في الاستخدام ويعطيك الحرية المطلقة في تغيير و اعادة كتابة اي دالة في الاطار . وفي الوقت نفسه هو متعب قليلاً ولا تشعر بالفرق الكبير الا من ناحية استخدام كلاسات جاهزة تأتي مع الاطار مثل رفع الملفات و تسجيل الدخول وغيرها . حتى انني امتلك نسختي الخاصة المعدلة من هذا الاطار لأنه مفتوح المصدر قمت بتخصصيص نسخة خاصة بي وبرمجة لها العديد من الاضافات مثل Template engine .

 

في السنة الماضية انتقلت الى اطار عمل اسمهُ CakePHP وبصراحة لم اندم ولازلت اطور عليه الى هذه اللحظة . مايُميز هذا الاطار انه يحتوي على Console App برنامج يعمل على التيرمنال يختصر عليك الوقت و الجهد بحيث

–  بشكل تلقائي يقوم بعمل Insert Update Delete Select  لكل الجداول الموجودة في برنامجك , لذلك اعبر انك تبرمج لوحة التحكم في اقل من ساعة لنظام لا يقل عن ١٠ جداول

– مبني على ستاندر عالمية  , بحيث اسماء الملفات و اسماء لكلاسات يجب ان تكون بمنهج واحد مثل i8n للغة

– يحتوي على Debugging info يطلعك على جميع الاشياء التي تحدث والاخطاء

– مبني بالكامل على OOP وايضا يعتمد على Arrays في الاعدادات وغيره

– يحتوي على نظام كاش للملفات سريع

– يحتوي على مئات الاضافات لأنه مبني على Composer

 

لمعرفة تفاصيل اضافية عن Cakephp الرجاء الضغط على الصورة للانتقال الى موقعهم الرسمي

 

 

وهناك انواع اخرى مثل

Zend

yii 2

symfony

 

افكر في التدوينات القادمة اقدم شرح عن Cakephp 3 بالتفصيل .

 

 

 

الخلاصة :

 

شكرا لكم على حسن القراءة ولنا لقاء في تدوينات قريبة مميزة باذن الله , تقبلوا تحياتي اخوكم كودر

image sources

  • x2coder_MVC: كودر

عن كودر

[ كـودر ] مهندس برمجة , أحب التقنية , مُطوّر انظمة و تطبيقات , مهووس بالتقنية وكل جديد في عالم الإنترنت , أحب الكتابة عن التقنية عندما تسمح لي الفرصة .

شاهد أيضاً

ارسال الملفات باستخدام cURL في لغة PHP

في هذه التدوينة سوف نتعرف على طريقة استخدام مكتبة CURL لإرسال ملف باستخدام لغة PHP

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

*