إعادة صياغة الكود أداة أساسية لتحقيق البرمجة الرشيقة

السلام عليكم

تكلمانا في تدوينة سابقة عن البرمجة الرشيقة وعن إعادة صياغة الكود، واﻵن نُريد الجمع بينهما في اﻹستخدام.

تختلف مدرسة البرمجة الرشيقة Agile عن مدرسة الـ Waterfall في أن الأخيرة تترك موضوع كتابة كود البرنامج في المراحل المتأخرة بعد فهم المتطلبات وعمل كل اﻹجراءات اﻷولية الطويلة في دورة  تطوير النظام، أما طريقة البرمجة الرشيقة ففيها يبدأ كتابة الكود في وقت مبكر جداً، وهذا التبكير في كتابة الكود احياناً يسبق اﻹنتهاء من التصميم، حيث أن التصميم ومعمارية النظام تكون متواصلة في كافة زمن التطوير. ومع مرور الوقت يحتاج النظام ليتوسع في التصميم والمعمارية لإستيعاب ميزات وأجزاء إضافية جديدة. يجب أن لا يكون تغيير التصميم عائق في البرمجة الرشيقة، بإعتبار أنه يحدث كثيراً في هذا النوع من البرمجة، لذلك لابد من أن تتوفر عملية إعادة صياغة الكود في أداة التطوير والتي تُمثل قلب العمل البرمجي وأداة مهمة جداً في البرمجة الرشيقة.

refactor-timer

كلما كانت أداة التطوير بها إمكانات كبيرة في إعادة صياغة الكود فإن ذلك ينعكس إيجاباً في سرعة التطوير ومرونة توسعة التصميم ليتناسب مع إحتياجات مرحلة ما في دورة  تطوير اﻷنظمة. وهذه الميزة (إعادة الصياغة) تجعل المبرمج يبدأ كتابة اﻷجزاء الجديدة دون الخوف من عدم وضوح التصور النهائي لمعمارية النظام.

مرونة إعادة الصياغة لا توفرها فقط أداة التطوير، لكن الطريقة البرمجية الصحيحة تُسهل ذلك، مثل إستخدام البرمجة الكائنية، فصل واجهة النظام (presentation) من الإجراءات الداخلية للنظام application logic وكذلك عدم وضع جزء من كود النظام في قاعدة البيانات بإستخدام stored procedures مثلاً.

الكاتب: أبو إياس

مهندس برمجيات

13 رأي حول “إعادة صياغة الكود أداة أساسية لتحقيق البرمجة الرشيقة”

  1. لا يوجد ادوات حقيقية او نظريات فعالة في اعادة الهيكلة، العملية نتاج خبرة سنوات، و نتاج تغيير في القناعات، او احيانا قهر الظروف.
    فعليا يتم هيكلة طريقة تفكير المبرمج نفسه لا الكود، و القرار فعليا يرجع للمبرمج بشكل نهائي و لخبرته، فاحيانا عمل طبقات للاصناف يكون غير ضروري في المشاريع الصغير، او الاختيار بين عمله كتابع function أو عمله كصنف (class) خيار ناتج عن الخبرة و الضرورة لا مجرد اختيار عمله كصنف يكون هو الافضل، كذلك تقسيم الصنف إلى طبقات أو تجزئتها إلى اصناف مترابطة، هو خيار للضرورة فقط، او حسن نوع المنتج، بين ان يكون المنتج عنصر من عاصر البرمجة او مجرد منتج نهائي.

  2. مدرسة البرمجة الرشيقة وعملية إعادة صياغة الكود ربما لم تنته بعد، هي تتطوير بمرور الزمن وبظهور إجتياجات وتحديات إدارية، فنية وتسويقية جديدة في العالم المتسارع في تقنية المعلومات.

  3. “Dependency Injection” هذه من اﻷشياء التي أتمنى أن أفهمها، قرأتها أكثر من مرة على عُجالة ولم أفهمها. سوف أقرأها عندما أكون أكثر تفرغاً إن شاء الله

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

    هذا النوع من العلوم لا يزيدك شيئا سوى انه يقوم بتوصيف ما انت تفعله فعليا.

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

  6. استمعت إلى فيدو الشرح الذي أشار إليه اﻷخ أزرق. وقد فهمته اﻵن، وهو معتمد على تعدد اﻷشكال polymorphism . لكن المشكلة أن المثال المذكور عن رسم دائرة ومثلث مثال بسيط وغير مُستخدم، ربما إذا كان المثال يحتوي على التعامل مع قاعدة بيانات مثلاً يمكن أن توضح فيه الفائدة العملية من الـ dependency injection

  7. dependency injection كمَا تعني حقن التبعية, يتم خلَالها حقن كود (Int, String,Object, method,…)دَاخل Class in runtime.. و بالتالي تغيير عمل ال Class دون الحاجة لإعادة كتابته، هدا يخلق مجال واسع لإمكانيات هاىلة۔ لمعرفة عمل حقن التبعية يجب فهم اولا Reflection & type introspection ۔لكن ليس بالضروري۔

    هده 5 فِيديوهات تشره إستعمالdependency injectionمع او بدون dependency injection ۔
    لاحظ كيف يتم حقن الكود و التحكم فيه بواسطة XML & Annotations–

  8. شكراً جزيلاً أستاذ على الإسهاب في الشرح، لكن هل ممكن أن تذكر أمثلة موجودة على أرض الواقع تعمل بنفس مبدأ العمل؟
    وشكراً مرة أخرى،،

  9. هذا ليس نوع من البرمجة. لكن آلية تُستخدم أثناء تطوير البرامج لتصحيح التصميم الداخلي وإنتاج كود أكثر مقروئية وأكثر قابلية لإعادة الاستخدام وقابل للتوسعة

اترك رداً على أبو إياس إلغاء الرد