21

عندما تدمن العمل على Framework معين ؟

السلام عليكم ورحمة الله و بركاته

منذ حوالى 3 سنوات كنت أعمل بال raw php فى برمجياتى و لكن منذ أن تعلمت البرمجة إعتماداً على إطار معين أدمنت كتابة البرمجيات التى أعمل عليها ب إطار codeigniter و أنشأت به حوالى 11 برمجية منها القوى و الملغم بالكود و منها البسيط ومنها المواقع الشخصية ومنها مواقع التطبيقات ومنها ال backends و حاولت مراراً و تكراراً البدأ فى الرحيل عنه و ذلك لأنه لم يعد مدعوماً بالشكل القوى كما عهدته و شركة ellislab تعرضه للإحتضان من قبل شركة أخرى.

تعلمت Laravel و قرأت فى YII و لكنى وجدت منهما من التعقيدات فى عملية ال routing وحدها ما اضطرنى للإبتعاد عنهما . فأنا لا أريد إنجاز المشاريع الخاصة بى فى أوقات طويلة تستهلك معظمها فى تهيئة و إعداد إطار العمل , و سرعان ما فهمت معنى الكلمة التى إتخذها إطار عمل codeigniter شعاراً له وهى

framework with a small footprint إطار عمل نعم و قوى جداً نعم و لكن تأثيره و تدخله و بصمته فى الكود لا تكاد تظهر , تحس أنك تكتب raw php و لا تشعر بأنك تعتمد على فريمورك , بالكاد تحتاج لعمل routing له و يمكنك إستخدامه بدونها أساساً و بعمل أدنى حد ممكن من ال configurations يمكن البدأ فوراً فى كتابة الكود .

السؤال هو :

ما هو الجذاب فى أطر العمل الأخرى لأهاجر إليها ؟


23

و عليكم السلام و رحمة الله و بركاته،

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

الجواب القصير

جرب Ruby on Rails

الجواب الطويل

بدايتي ببرمجة تطبيقات الويب بدأت كبدايتتك لكن بشكل جدا خفيف. كنت أبرمج تطبيقات صغيرة بـ raw php. بعدها توقفت لفترة، و رجعت لأجد مبدأ اطر العمل. الأكثر استخداما ذاك الوقت كان codeigniter. و صدقا كان سهل جدا تعلمه. برمجت أكثر من تطبيق صغير بكل سهولة و يسر و بدون اخذ الكثير من الوقت لتعلم الإطار لأن الـ documentiation سهل و واضح. بعدها تركت برمجة تطبيقات الويب لفترة ^^ (مررت بفترة مشاريع جامعة و أولوياتي جعلتني اترك برمجة الويب لفترة).

عندما رجعت للمرة الثانية، وجدت أن اطار codeigniter غير متوافق مع آخر اصدار PHP، إذا لم اكن مخطئا، كانت 5.4. بحثت عن أفضل إطار بالنسبة لي (خفيف، سهل، لا تعقيدات غريبة) و وضعت قائمة بأسماء بعض أطر العمل و بدأت أقرأ documentation كل إطار. وجدت أن الأفضل لي كان Symfony2. الـ routing و بعض خصائص الإطار تستطيع تعديلها بكتابة ملف yaml و ليس php. و هذا فرق بين الاثنين:

PHP

// app/config/routing.php
    use Symfony\Component\Routing\RouteCollection;
    use Symfony\Component\Routing\Route;

    $collection = new RouteCollection();
    $collection->add('blog_show', new Route('/blog/{slug}', array(
        '_controller' => 'AcmeBlogBundle:Blog:show',
    )));

    return $collection;

و هذا Yaml

# app/config/routing.yml
    blog_show:
        path:      /blog/{slug}
        defaults:  { _controller: AcmeBlogBundle:Blog:show }

هذا غير أن بعض مكوناته الداخلية دمجتها Drupal في بنيتها في آخر اصداراتها. يعني كانت بالنسبة لي أفضل ما مررت به. بعدها وجدت بالصدفة إطار laravel، وجدت فيه سهولة أكثر من symfony بدون تعقيدات symfony. صحيح كانت تفقد الكثير مقارنة بـ symfony (بدأت laravel في بداياتها، أتوقع تطورت كثيرا الآن). و بدأت فيها و انتهيت من كم تطبيق صغير.

بعد فترة، و بسبب كثرة لغات البرمجة التي كنت استخدمها، اكتشفت اني استطيع كتابة برمجيات بلغة PHP لكن بسيطة. و السبب؟ كان أغلب وقتي على لغة برمجة python و السبب كتابتي لأدوات إطارة linux. و اكتشفت أني غير متعمق في لغة python أيضا، لذا قررت التخلي عن PHP و التوجه للغة تساعدني لبرمجة scripts للينكس.

لغة السكربتات للينكس من ضمنها python و ruby. و قررت التعلم على واحد من اللغتين، لكن أيهم؟ كان قراري يحتم علي اختيار لغة فيها تطبيقات ويب و فيها سكريبتات للينكس. قررت البدء بالويب أولا. الأشهر في Python كان اطار عمل django، قرأت في البداية عنه الكثير لكن لم يمتص عقلي منه الكثير. عندها قررت مقارنته بـ rails في روبي.

كانت لحظة تاريخية عندما اكتشفت امكانيات rails مدموجة بسهولة لغة روبي

مثلا الـ rouing

get '/patients/:id', to: 'patients#show'

أتوقع فهمتها بدون حتى الحاجة لقراءة أي شئ. طلبات \patients:id ترسل لـ controller اسمه patient لـدالة show.

و مثلا لجلب قائمة بكل المرضى، الطريقة المتبعة في rails نفس laravel، بمعنى

في Rails تكتب

patient = Patient.all

في laravel تكتب

$patient = Patient::all();

في Codeignotor تكتب

 $query = $this->db->get('patient');

في Symfony2 تكتب

$repository = $this->getDoctrine()->getRepository('AcmeStoreBundle:Patient');
$patients = $repository->findAll();

لاحظت سهولة Rails؟ و عشان تقتنع أكثر، إذا أحببت إضافة نظام أعضاء، ماذا تفعل؟ تبرمجه صحيح! أو تفعله في laravel و تضيف على routing للتأكد و ... في Rails تقوم بكتابة سطر واحد فقط و تنفيذ سطرين في سطر الأوامر و بعدها لديك نظام أعضاء بإمكانيات كثير (تسجيل دخول و خروج، ايقاف مؤقت للدخول إذا حاول أكثر من عدد مرات معين، طلب التاكد من البريد قبل تفعيل الحساب، ..... ).

لم تقتنع؟

افرض لديك الـ form هذا:

<%= form_for @person do |f| %>
      <%= f.label :first_name %>:
      <%= f.text_field :first_name %><br />

      <%= f.label :last_name %>:
      <%= f.text_field :last_name %><br />

      <%= f.submit %>
    <% end %>

معناه، لديك labels الأول <%= f.label :first_name %>: و الثاني <%= f.label :last_name %>. الوسوم <% هذه للـ termplate لن ادخل في معناها الآن.

و لديك مربعين input من نوع text_field. و زر submit. إذا ضغت على الزر سيرسل الطلب. لكن افرض طلب العميل ان تجعل الفورم ajax؟ في rails، هذا الشئ الوحيد الذي ستضيفه:

remote: true

مما يجعل الفورم بالشكل التالي:

    <%= form_for @person, remote: true do |f| %>
      <%= f.label :first_name %>:
      <%= f.text_field :first_name %><br />

      <%= f.label :last_name %>:
      <%= f.text_field :last_name %><br />

      <%= f.submit %>
    <% end %>

و الآن الفورم يرسل طلب Ajax بدلا من طلب عادي. و في الـ controller ستضيف رد مخصص لطلبات Ajax. فقط

هذه بعض الامثلة لـ rails،

فـ جوابا على سؤال: Rails يقوم بالكثير من magic في الخلفية ليساعدني في تسريع بناء تطبيقات الويب، و يزيل هم إعادة أجزاء من الكود. غير أن Ruby لغة ممتعة للعين :)

حقاً أستفيد منك كل مره تكتب فيها رداً على اطروحاتى , و لكن لى استفسار بسيط بخصوص ال routing لماذا لا يكون إطار العمل بدون إضطرارنا إلى عمل إعدادات routing ؟؟ إلا لم يريد

فى codeigniter لا يشترط عمل routing و يمكن البدأ بكتابة ال controllers و الوصول إليها بكل سهولة

  users/get_user/90/45

users > class name
get_user > function name
90 > first parameter
45 > second parameter and so on 

لا تنسى أدوات تحسين إدارة المشاريع مثل أدوات الاختبار كالـCucumber و userstory التي تسهل عملية البرمجة والعثور الأخطاء وقت حدوثها مباشرة ومكان حدوثها مباشرة دون أي مجهود يذكر منك

cakephp يشبة الريلز تماما

فبدلا ما تقترح عليه تغير لغة برمجة بالكامل لماذا لا نرشده لوجه التشابه بين ما إكتشفته فى الريلز والكيك فريمورك على نفس اللغة التى يعمل بها

لم أستخدم cakephp و لا أتذكر إذا قمت بمقارنته. و بما أن الأخ عبدالله مستخدم للـ PHP قد يفضل الـ PHP. لكن ما المانع من توسعة آفاقك؟ من الجيد رؤية ما أطر العمل الأخرى تقدم، ربما تستفيد من أحدها و تقوم بتطبيق إحدى المبادئ في الإطار الذي تستخدمه لتطويره.

و أيضا سبب اقتراحي لروبي أون ريلز هو أن الأخ عبدالله لم يسأل في قسم الـ PHP و لم يحدد لغة معينة في سؤاله

ما هو الجذاب فى أطر العمل الأخرى لأهاجر إليها ؟

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

و للمعلومية، توجد دروس جدا ممتازة لرايلز، و في خلال اسبوع، و بدون أي خبرة سابقة، تستطيع بناء تطبيقات ممتازة،

مثلا هذا يعلمك كل شئ بدءا من الأساسيات لبناء نسخة مصغرة من تويتر باستخدام رايلز باتباع أساليب البرمجة السليمة