كتابة الأكواد البرمجية امر سهل للغاية، لكن كتابة كود نظيف يؤدي غرضه بكفاءة عالية لفترة طويلة من الزمن امر غير سهل ويحتاج بذل الكثير من الوقت والجهد.
لهذا الغرض قام كريستوفر ويلسون بتأليف كتاب ( The clean architecture in PHP ) ليشرح كيفية كتابة اكواد نظيفة تعمل بكفاءة عالية، بالرغم الى ان عنوان الكتاب يشير الى لغة PHP الا ان الكاتب لايتحدث بشكل كبير عن لغة PHP ولكن يتحدث عن الهيكلة الصحيحة لكتابة الاكواد البرمجية بشكل عام.
في الفصل الاول من الكتاب، المؤلف يجعلك تدرك ان الاكواد البرمجية التي قمت بكتابتها من قبل هي في الحقيقة تتبع لهيكلة معينة حتى لو كان البرنامج بسيط ومحصور على حاسوبك الشخصي فقط، بغض النظر سواء كانت هيكلتك سليمة ام خاطئه لان هيكلة الكود بطريقة معينة ماهي الا تحديد للطريقة التي ستنتقل البيانات خلال النظام وكيف يتعامل البرنامج مع البيانات.
وفي الجانب العملي يبدأ الكتاب من ابسط الامور مثل تنظيم ملفات البرنامج وكذلك طريقة اتصال النظام بقاعدة البيانات الى الامور المعقدة مثل، الى كم طبقة Layer يمكنك تجزءة النظام. هذه الامور مهمة للغاية وإلا ستصبح اكواد البرنامج غير منظمة وغير متجانسبة مع بعضها البعض وسيصبح من الصعب عليك اختبار البرنامج وستواجه صعوبه في التعديل على البرنامج خصوصا اذا كانت هناك طلبات تعديل جديدة للعميل.
ثم بعد ذلك يقترح عليك الكتاب استخدام مايدعى بـ Decoupling Toolbox وهي عبارة عن خمسة مبادئ لكيفية كتابة كود نظيف ويعمل بكفاءة عالية.
يشرح الكتاب اهمية التعامل مع اساليب التصميم Design Patterns وتوجد هناك العشرات من اساليب التصميم لكن كبداية ينصحك المؤلف بأن تبدء بـ Factory، Repository، Adapter و Strategy، اساليب التصميم تساعدك على فصل الكود البرمجي عن الامور الاخرى المتعلقة بالتصميم مثلا وبالتالي تصبح عملية الصيانة للكود اسهل واي تغيير في كود البرنامج يصبح اسهل كذلك.
ينتقد المؤلف مصطلح Model والتي اختصارها M في اسلوب التصميم MVC ويقول انها غير واضحه ومربكه ويقترح انه من الافضل تسميتها Entities and Persistence حتى تكون اسهل للفهم.
في الجزء الثاني من الكتاب يشرح الكاتب مثال لبناء نظام مشتريات بأستخدام اطار العمل Zend Framework 2 ثم يقوم بتغيير اطار العمل الى Laravel فقط ليوضح ان الهيكلة السليمة للكود تجعله اكثر مرونة وسهولة في التغيير.
الكتاب متقدم نوعاً ما لكن موجه لكافة المبرمجين الذين يريدون تعلم كيفية كتابة كود نظيف وذو جودة عالية، الجميل في هذا الكتاب ان الكاتب لايكتفي فقط بشرح النظريات بل يوضح افكارة بشكل عملي.
تقيمي للكتاب اعطيه 4 من 5
سعر الكتاب 16$ واذا تحب تدعم مؤلف الكتاب ممكن تشتري الكتاب بمبلغ اكبر.
يمكنك تحميل نسخة مختصره من الكتاب او شراء الكتاب من الرابط التالي :
التعليقات
في الحقيقة لم أقرأ الكتاب بعد ولكن قبل فترة قرأتُ عن معمارية لترتيب الأكواد البرمجية تسمى بـ hexagonal architecture و هي شبيهة بطريقة ما من المعمارية المذكورة في الكتاب و ذلك لأن شارح المعمارية التي ذكرتها قال هذا ، الفوائد التي يمكن أن تتيحها هذه معماريات مثل هذه كما أذكر التالي :
- ترتيب الأكواد بحيث كل فئة (class) له مهمة محددة و بالتالي تقليل مشاكل تعقيد الاكواد و ضخامة الفئات بسبب الاعتماد على فئات محددة في كثير من الأوامر .
مبدأ لا تكرر نفسك : Dont Repeat Your selft .
- كتابة الأكواد بحيث لا تعتمد كلياً على إطار عمل ما أو أداة ما كليةً و التبديل بين أطر العمل و الأدوات ذات الغرض الواحد بسهولة ، و يمكن الاستفادة من ذلك في زيادة المدة التي يمكن أن يعتمد فيها المبرمج على الكود الخاص به بحيث يستبدل الادوات عند تغير نمط العمل من دون تغييرات مفصلية في شفرته البرمجية .
مبدأ حقن الاعتماديات : Injection Depnedancy .
- إستخدام طرق معروفة بين المبرمجين متوسطي الخبرة لحل مشاكل عامة و هي أنماط التصميم (Design Patterns) ، بحيث يمكن لأي مطور ينضم للمشروع فهم تفاصيله بكل سهولة إذا كان يفهم نمط التصميم المعين .
ملاحظات على بعض سلبيات المعمارية:
أن معمارية مثل هذه يفضل أن تكون للمشاريع الكبيرة طويلة الأجل ، فإستخدام هذه المعمارية للمشاريع الصغيرة و المتوسطة لا يتعدى تعقيد كود المشروع و بالتالي تعقيد تطويره .
زيادة عدد الملفات و الفئات (class) بسبب ما يسمى بي (decoupling) أو الفصل و ذلك عند إستخدام *interfaces - مجموعة من المطورين يعتبرونها *عقود بين الفئات داخل الكود بحيث تلتزم الفئة الكذا بأن يوجد بها function (الدالة) كذا ... إلخ .
في الحقيقة لم اسمع من قبل عن معمارية hexagonal architecture ، لكن الكتاب يشرح مفاهيم كثيرة ولا يتحدث عن معمارية محدده، تقريبا كل الذي ذكرته يغطيه الكتاب، يشرح ترتيب الاكواد وتنظيمها، وكذلك موضوع الاعتماديه على اطر العمل Frameworks، الجميل في الكتاب انه في الفصل الثاني يشرح كل هذه الامور بشكل عملي وهو مايجعل هذه الافكار تترسخ في الذهن بشكل جيد.
هذه الامور فعلا لا داعي لها في المشاريع الصغيرة لكن اعتقد انه يجب على اي مبرمج اي ياخذ ولو فكرة بسيطة عن كيفية كتابة البرامج بشكل منضم ومرتب.