الجمعة، 29 أبريل 2005

نظرة على أطر العمل MVC

هناك نوع من البرامج يسمى بالإنجليزية "Framework" وبترجمة حرفية: إطار عمل، وهي في الحقيقة ليست برامج كاملة بل هي مكونات تساعد المبرمجين على إنجاز برامجهم، وتأتي بأشكال عديدة، منها ما يسمى MVC اختصاراً لثلاث كلمات: Model view controller، ويمكنكم قراءة المزيد عن MVC في [ويكيبيديا](http://en.wikipedia.org/wiki/Model-view-controller).

تقوم MVC على أساس ثلاث مكونات، Model وهو الجزء الذي يربط بين البيانات ويوضح العلاقة في ما بينها، أما View فوظيفته عرض هذه البيانات بالشكل الذي يريده المبرمج، أو هو باختصار واجهة البرنامج، أما Controller فهو الذي يربط بين Model وView وهو المسؤول عن تنفيذ الأوامر أو باختصار هو الجزء الذي يتحكم في ما يفعله البرنامج.

يبدو الأمر معقداً، أليس كذلك؟ في الواقع التقنية هذه بسيطة فقط تحتاج إلى تركيز لكي تفهمها جيداً، في البداية المستخدم يتفاعل مع واجهة البرنامج والتي يتحكم بها View، إذا ضغط المستخدم على زر ما يتلقى الجزء المتحكم Controller هذا الأمر ويطلب البيانات من Model ثم يرسلها إلى View لكي يعرضها للمستخدم، هذا أبسط شرح استطعت الوصول له!

ما الفائدة من MVC؟ أغلب المبرمجين يتعاملون مع نفس المشاكل في كل مرة يبدأون فيها برمجة مشروع جديد، وإطار عمل MVC يختصر عليهم الوقت والجهد فلا حاجة لأن يكرر المبرمج نفس الأوامر مرة تلو مرة، بل عليه أن يستخدم إطار عمل ويبني البرنامج على أساسه، وMVC تصلح أيضاً للمبتدئين في البرمجة، فلا حاجة لأن يعرفوا كيف يتصل البرنامج مع قاعدة البيانات بل كل ما عليهم فعله هو إنشاء الآلية التي يسير عليها البرنامج وتصميم الواجهة ويتركون باقي التعقيدات لإطار عمل MVC.

ما علاقة كل ما كتبته أعلاه بتطوير المواقع؟

##### البداية مع Ruby on Rails
روبي في فضائياتنا نوع من أسلحة الإفساد الشامل، دعونا لا نبدأ نقاشاً حول هذا الموضوع ونركز على البرمجة فقط، [روبي أون ريلز](http://www.rubyonrails.com/) إطار عمل من نوع MVC مخصص لإنشاء تطبيقات ويب، وهو يستخدم لغة البرمجة [روبي](http://www.ruby-lang.org/) التي يمكن استخدامها لإنشاء أنواع كثيرة من البرامج، والشخص الذي يقف خلف ريلز هو [ديفيد هانسون](http://www.loudthinking.com/) أحد أعضاء فريق مؤسسة [37signals](http://www.37signals.com/).

ويستخدم إطار العمل هذا في مواقع وتطبيقات كثيرة، من أشهرها [بيس كامب](http://www.basecamphq.com/) و[تادا لست](http://www.tadalist.com/) وقريباً سنرى خدمة جديدة تعتمد على ريلز وهي [Backpack](http://backpackit.com/) وموقع [43Things](http://www.43things.com/) يعتمد أيضاً على ريلز وهناك سكربت ويكي يستخدم نفس إطار العمل وهو [إنستيكي](http://instiki.org/show/HomePage).

من الصعب أن أشرح ما يميز روبي أون ريلز بكلمات قليلة، فهو إطار عمل يختصر الوقت والجهد بشكل كبير، وحتى تأخذوا فكرة واضحة عن مميزات ريلز عليكم بزيارة صفحة [ريلز أكاديمي](http://wiki.rubyonrails.com/rails/show/RailsAcademy) التي تقدم روابط لدروس مصورة حول ريلز، بالطبع تحتاجون إلى مشغل فلاش وكويك تايم لرؤية هذه الدروس، وأتذكر دهشتي عندما رأيت هذه الدروس لأول مرة، ولعل بعضكم سيختبر نفس الشعور، لأن ريلز يقدم حلولاً ممتازة لمشاكل متكررة.

المشكلة في ريلز أنه يعتمد على لغة روبي، وهذا يعني أن على المبرمج تعلم لغة جديدة، وهي لغة غير منتشرة بشكل كبير وهناك قلة من شركات الاستضافة تدعم هذه اللغة، إذا زالت مثل هذه الأسباب سنرى الكثير من الناس يستخدمون ريلز لإنشاء تطبيقاتهم وسنرى المزيد من البرامج المميزة لأن الذين يستخدمون ريلز عليهم أن يركزوا على الواجهة أكثر من أي شيء آخر ثم طريقة عمل البرنامج.

##### الكعك لمبرمجي PHP
مع ظهور ريلز وانتشارها وكثرة الكتابة عنها في الكثير من المواقع ظهرت الحاجة لإنشاء إطار عمل مشابه ويعمل بلغة PHP وهذا يعني تجاوز مشاكل لغة روبي، فلغة PHP منتشرة ويدعمها أغلب شركات الاستضافة، وقد وجدت إطار عمل يسمى [Cake](http://sputnik.pl/cake/) أو كعك! ويعمل بنفس أسلوب ريلز، هذا الإطار لا زال جديداً وليس بقوة ريلز ولا شهرته، وللأسف مبرمج إطار العمل هذا يستخدم رخصة Public Domain لترخيص برنامجه، وهذا يعني أن أي شخص يستطيع فعل ما يريد في البرنامج دون حتى أن يضطر إلى ذكر صاحب الحقوق، سأرسل رسالة للمبرمج أطلب منه أن يغير الترخيص إلى LGPL على الأقل، فهذه الرخصة تسمح لمن يريد استخدام البرنامج في مشاريع تجارية على شرط أن يشارك بأي تعديلات قام بعملها ولا يشترط أن يكون كل برنامجه التجاري مفتوح المصدر، بل فقط الجزء الذي يستخدم فيه برنامجاً حراً.

على أي حال، إطار العمل هذا يبدو واعداً وقد قام شخص ما بإنشاء [ويكي](http://cake.bplusf.net/doku.php) لمساعدة الآخرين على استخدام الكعك، وهناك [قائمة بريدية](http://groups-beta.google.com/group/cake-php) في جوجل للحوار حول "الكعكة" ... ألم يجد المبرمج اسماً أفضل من هذا؟

##### خاتمة
هذه نظرة عامة على ما يسمى MVC شخصياً أنا بحاجة لقراءة المزيد عن هذه التقنية وربما تجربتها لفهمها أكثر، أنصح جميع المبرمجين برؤية الدروس حول ريلز لفهم مميزات إطر العمل هذه، وقراءة ما يمكن قراءته من موقع ريلز وكذلك موقع كيك، ولعل بعضكم يستخدم أحد أطر العمل هذه لإنشاء برامجه في المستقبل.