Nov 15 عن أطر العمل المتكاملة الحزم و الملصقة- Glue vs Full stack Frameworks
لعلك تعرف ماهو إطار العمل (framework),و على الأرجح قد تكون إستخدمتة فى أثناء برمجتك لبعض الأعمال أيا كانت اللغة التى تستخدمها :
إطار العمل: مجموعة من الأدوات، المكاتب البرمجية، الاصطلاحات (conventions) وأفضل الممارسات البرمجية لمحاولة تجريد المهام التكرارية ووضعها ضمن وحدات برمجية كي يعاد استعمالها.
إذن مبدأ إطار العمل يقوم على عزل المهام البرمجية المتكررة ووضعها ضمن وحدة برمجية جاهزة، ومهمتك أن تقوم فقط باستدعاء التابع المناسب لك بدل كتابتها من جديد، وجعل تركيز المطور منكباً على المهام البرمجية الجديدة، عوضاً عن شغله بالمهام الروتينية المتكررة وكما يطلق عليه “إعادة اختراع العجلة”. [ماهو إطار العمل Framwork؟ ]
و لكن ما هو إطار العمل الأنسب لمشروعك ؟على أى أساس تقوم بالإختيار ؟
برأى أول و أهم نقطة فى الإختيار هو منهجية العمل “Methodology” ,و هى بالنسبة لإطارات العمل تحديد إلى اى فئة ينتمى ..هل الى الأطر الملصقة (Glue Frameworks )أم الأطر الكاملة (Full stack frameworks), أهمية هذة النقطة تأتى من تأثيرها المباشر على سير العمل بتطبيقك من حيث مرونة الإطار لإضافة أى أدوات أو مكتبات خارجية , الوقت المبذول لتغيير طريقة عمل أحد المكونات الأساسية للإطار بما يتماشى و تطبيقك إذا كان تطبيقك يتطلب تطويعا للإطار ,حجم تطبيقك و الوقت المطلوب لإنجازة و يجب أن تعرف أولا ما هى منهجية عمل الإطار و تنتقى الإطار الذى تتماشى منهجيتة مع تطبيقك و إلا ستخسر الكثير من الوقت و الجهد.
إطار الحزم المتكاملة (Full stack framework):
هو الإطار الذى يتكون من مجموعة موحدة من المكونات (components) التى تقدم لك كل ما تحتاجة فى تطبيقك البرمجى , سبب التسمية يرجع لكون هذا الإطار صمم لكى تعمل مكوناتة معا بشكل مثالى و متكامل بحيث لا يكون هناك حاجة لإضافة أى أدوات أو مكونات خارجية و أى تغيير أو إضافة مكونات ستكون خارج هدف الإطار و ستبذل مجهودا لتطبيقهاو تطويع الإطار ليعمل معها بسلاسة.
المميزات:
1-السرعة فى انجاز العمل :
الإطار الكامل يحاول تغطية كل العناصر المطلوبة فى تطبيق العمل فلو التزمت بطريقة عملة يمكنك انجاز العمل بسرعة فائقة و
ما عليك إلا إستدعاء طرق العمل .
2-يناسب فريق العمل الكبير:
هذا الإطار يسهل من تحكم قائد العمل بالفريق الكبير العدد لأن الإستخدام الأمثل لهذا الإطار هو اتباع مكوناتة الأساسية و بالتالى السير على طرق موحدة للعمل .
العيوب :
1-تعقد التكوين :
الإطار الكامل يحاول تقديم اكبر عدد من المكونات للمستخدم لتوفير الوقت و سرعة الإنجاز و بأتى ذلك على حساب حجم الإطار و تعقد تكوينة مما يجعلة صعب الفهم على المستخدم العادى .
2-غير مرن :
فى ظل إستخدام هذا الإطار يجبر المستخدم على استخدام مكوناتة حتى لو لم تكن ضمن مفضلاتة , و لو اردت تعديل كيفية عمل أحد المكونات ستضطر للغوص فى كم من الأكواد لمعرفة كيفية عمل الإطار و تكوينة و هو ما سيلغى فائدة سرعة الإنجاز التى سبق و ذكرناها.
3-التعلم :
فى ظل الإطار الكامل كل شىء تقريبا مطلوب فى العمل موجود مسبق و مكود بحيث ما عليك إلا إستدعاء طرق تنفيذ العمل و يحد ذلك من تدخل المطور فى الكود الأمر الذى يحد من قدرة المطور على تعلم الجديد فى كل مرة يطبق فيها مشروعا(شخصيا أجدها نقطة هامة).
أمثلة :
- CakePHP (إطار عمل متكامل للغة PHP)
- Symphony (إطار عمل متكامل للغة PHP)
- Prado (إطار عمل متكامل للغة PHP)
- Django (إطار عمل متكامل للغة Python)
الإطار الملصق (Glue Framework ):
هو الأطار الذى يتكون من مجموعة من المكونات (components)التى تغطى أهم الإحتياجات فى تطبيقك البرمجى و سبب التسمية يرجع لأن هذاالإطار صمم لكى تعمل مكوناتة الأساسية فى تناسق مع بعضها بالإضافة لإمكانية إضافة (لصق) أى مكونات خارجية من المحتمل إضافتها للإطار حسب رغبة المبرمج , بمعنى انة يمكنك ان تنتقى أو تترك من مكونات الإطار الأساسية ما يناسبك مع لصق أى مكونات خارجية لها ..يوصف هذا الإطار بالمرن لسهولة تطويعة لإحداث التغيرات
المميزات :
1-المرونة :
الإطار الملصق مرن من حيث اختيار مكونات دون غيرها أو التعديل عليها فهو لا يفرض عليك طرق عمل واحدة.- 2- التعلم :
نظرا لطبيعة الإطار الذى يسهل عليك اختيار المكونات و تعديلها يتاح للمطور الإحتكاك المباشر بالكود و مواجهة بعض المشكلات و حلها جذريا , الأمر الذى يزيد من قدرتة على تعلم الجديد .
العيوب :
- -يجب ان تتوافر لديك قدرا لا بأس بة من القدرة على التكويد و المعرفة البرمجية إن أردت إضافة مكون غير متوافر بالإطار
.
امثلة :
- CodeIgniter (إطار عمل ملصق للغة PHP)
- Zend Framework (إطار عمل ملصق للغة PHP)
- Pylons (إطار عمل ملصق للغة Python)
- TurboGear (إطار عمل ملصق للغة Python)
و من التعريف السابق تستطيع أن تحدد منهجية عمل أى إطار لو قرأت قليلا عن هذا الإطار أو فى المنتدى الخاص بة أو لو قمت بتحميلة للتجربة فغالبا لا يذكر بشكل مباشر فى موقع الإطار منهجيتة و لكنها تستنتج من طريقة عملة و الكتابات عنة .
بعد تحديدك لمنهجية عمل الإطار و ما إذا كانت ملائمة لطبيعتك كمبرمج أو طبيعة فريق العمل و المشروع , تأتى نقاط أخرى للمقارنة منها مثلا :
- 1- مدى توافق متطلبات إطار العمل مع إمكانيات الإستضافة للسيرفر (مثلا لو إطار العمل يتطلب PHP 5 و انت لديك PHP4).
- 2- قاعدة الشعبية المتاحة للإطار مع توافر التوثيق و الدعم الكافى (لو واجهتك مشكلة بالإطار هل يوجد منتدى لبحث المشاكل أو الإضافات ؟هل يوجد توثيق كامل سهل الفهم لكيفية عمل الإطار ؟لو الإجابة لا إبتعد فورا ).
- 3- توافر أفضل المكتبات و الممارسات البرمجية و الأدوات التى تتماشى مع المعايير القياسية ضمن الإطار (مثلا هل الإطار يستخدم تقنية MVC التى ثبت فعاليتها فى العمل و تعتمد عليها أغلب الأطر ..ام أن الإطار ما زال يعمل بالطرق التقليدية ؟).
تجربتى الشخصية :
قمت بتجربة كلا من الإطار الكامل متمثلا فى “ِCakePHP” و الإطار الملصق متمثلا فى Codeigniter” ,” Zend Framework” و أرى ان اقصى استفادة ممكنة و سرعة فى العمل تتحق مع الإطار الملصق فأنا شخصيا أحب ان تكون لى حرية اختيار المكونات الخاصة بالإطار و لا تكون مفروضة على , بالإضافة لإمكانية تلبية طلب العميل إذا ما أراد وضع اى خاصية معينة لا تتماشى مع طبيعة عمل الإطار الكامل (هذة الحالة كابوس..ستضطر عندها لفهم كيفية عمل الإطار الكامل كلة )
إقرأ أيضا :


7:15 am 21/11/2008
رااائع جدا جدا المقال
بالعفل أبدعتي , أتمنى أن تكون قد وصلت رسالتي والتي كنت أستفسر فيها عن إطار العمل CodeIgniter وبالفعل أفدتيني والله
, بل أكثر
جزاكم الله خيرا ..
7:24 pm 21/11/2008
شكرا لك ياسر..أنا الأسعد انى قدمت معلومة مفيدة , قمت بالبحث عن رسالتك و لم أجدها هلا تكرمت و أعدت إرسالها أو تخبرنى ما هو إستفسارك عن CodeIgniter ؟..سعدت بتشريفك .
12:24 pm 26/11/2008
المقال في قمة الروعة والفائدة .. والإختصار كذلك .. شخصيــًا استفدت كثيرًا .. ولي فترة وأنا أريد أن أخوض في غمار البايثون .. ولكن لم أجد المحرر الجيد .. لكن بإذن الله بعد تثبيت الـ Pylons ستتغير الحال ^_^ .. جزيتي خيرًا أختي .. ونترقب المزيد من ابداعاتك ..
5:51 pm 27/11/2008
شكرا لك أخ براء ..بالتوفيق إن شاء اللة فى عالم البايثون
..أسعدتنى زيارتك
8:35 am 17/12/2008
مقال فى قمة الروعة اعجبنى طرحك للموضوع بشكل جديد
انا اول مرة اساسا اعرف فكرة اطر العمل الملصقة و اطر العمل المتكاملة
لكنى اود طرح الموضوع من جهة اخرى
لماذا افضل ال cakephp على ال codeigniter
دعم اطار العمل الذى تعمل عليه لل wordpress , drupal
cakephp يدعمها بشكل كامل
codeingniter الى الان لا
Framework Benchmark
codeingniter يتفوق على الكيك
اساسا انت ليه بتختار انك تشتغل باطار عمل , علشان سهولة التعامل مع الكود الى انت بتكتبه
ان كل حاجة فى الكود بتاعك بتبقى منظمة ال model و ال view و ال controller
و ده المبدا الى بيعتمد عليه اى اطار عمل MVC
ال view
cakephp بعتمد فى طريقة العرض على متغيرين title_for_layout و ال content_for_layout كل واحد مرتبط بطريقة عرض معينة و ممكن تغيرها كل الى عليك انك تعرف طريقة استخدمهم و تعمل ال view الخاصة بيك و عيش
codeingniter طريقة انكلود فايل و ممكن تعمل هوك و تستخدم نفس المبدأ الى بيستخدمه الكيك و فيه كمان كلاس للثيمات
الدعم و مجتمع الانترنت
codeingniter مجتمع صغير مقارنة ب cakephp لكن رغم صغره الا انه منظم مرتب, علشان تعرف بس الفرق ادخل على موقع ال codeingniter و موقع ال cakephp و من شكل الموقعين و من تنظيمهم هتعرف الفرق
من الاخر فى راى المتواضع ال codeingniter احسن من لا شىْ لكنه لايمكن مقارنته ب cakephp
cakephp بيدعم كودك بشكل كامل و بيطبق عليه فكرة ال MVC
منتظر تعليقك لماذا تفضلين ال codeingniter , مواقف ما خليتك تفضليه على ال cakephp
8:41 am 17/12/2008
مافيش واحدة بقى javascript framework VS بينهم و بين بعضيهم
5:29 am 24/12/2008
taha :
مرحبا بك كما قلت سابقا codeigniter لا يجبرك على استخدام طرق عمل معينة هو يحتوى على المكونات الأساسية و يترك لك حرية الإختيار و يعتمد على البساطة فى التكوين بعكس Cakephp فهو يجهز لك كل شىء تحتاجة مما يجعل انجاز العمل سريع و لكن من الصعب ان تعرف كيف يعمل كل جزء فى الإطار و التعديل فى طريقة العمل ستتطلب تعديل فى امكان اخرى كتيرة و انا احب ان اعرف كيف يعمل الإطار بسهولة و الا تحولت لمستخدم للإطار ولست مطور…و هذة النقطة هى من الفروق الرئيسية بين نوعى الإطارين الذى اشرت لة فى المقال
هناك غيرى واجهوا نفس الشعور , تفقد هذا الرابطقد تجدة مفيد
http://snook.ca/archives/php/codeigniter_vs_cakephp/
نقطة شيقة ما يتعلق ب javascript framework قد أفكر بالكتابة عنها و شكرا للفكرة ..شرفت بزيارتك
7:53 am 25/12/2008
الكلام الى تحت من المقال الى انتى حطه لينك ليه
I’m still personally a fan of CakePHP over CodeIgniter for much of the “automagic” that I mentioned. And it’s shortcomings have been getting addressed with each new iteration (1.2 will be a considerable leap over 1.1 but it will still be awhile before it’s released).
8:16 am 25/12/2008
taha :
الجزء دة بيأكد وجهة نظرى .,هو ذكر فى المقطع دة ان سبب إعجابة ب cakephp هو مبدأ ال automagic يعنى ان كل مكونات العمل للتطبيق موجودة مسبقا فى الإطار و جاهزة للعمل تلقائيا بشكل مترابط و مشتبك (اوتوماتيكيا) مما يجعل انجاز العمل سريع
و لكن لو قرأت الجزء اللى فوق فى المقال
Approach to Simplicity
I believe much of CodeIgniter’s appeal is its simplicity in its approach. Most of the work is done in the controller, loading in libraries, getting data from the model, and pulling in the view. Everything is in plain sight and you can really see how things work.
CakePHP’s simplicity comes via automation (euphemistically referred to as “automagic”). It makes the coding process quicker but harder to figure out “what is going on” without popping your head into the core.
بيذكر فية صراحة عيب الاتجاة الاوتماتيكى فى الشغل بالنسبة للناس اللى تحب تفهم كل جزء فى الشغل ماشى ازاى
عموما هى ترجع فى النهاية لفكر المبرمج و الاسلوب اللى يحب يعمل بية , يعنى لو عقدنا مقارنات بين الاإطارات الملصقة و المتكاملة ستجد كل فريق من مدعمى الاطر سيتحمس و يدافع عن النوع الذى يفضلة. دة ذوق شخصى فى العمل .لا يوجد حسم هنا ..المهم يكون لدينا ادراك للفرق بين الاتنين