The Seam Model: Legacy Code #04

الـ Seam هو عبارة عن مكان نقدر من خلاله اننا نغير في الـ Behavior يعني السلوك بتاع البرنامج بتاعنا في المكان ده من غير منغير اي حاجة في المكان ذات نفسه.
The Seam Model: Legacy Code #04
The Seam Model: Legacy Code #04

في هذه الصفحة

المقدمة

شوفنا مع بعض اننا عشان نبدأ نجهز الـ Classes بتاعتنا عشان نعملها Testing بنضطر اننا نكسر الاعتمادية اللي موجودة مع الـ Classes التانية , وعرفنا قد ايه ده بيكون صعب وتحدي كبير بالنسبالنا , ولكن ده بيساعدنا اننا دايما نفكر بشكل مختلف واحنا بنصمم بعد كده الـ Software.

فكلنا اما بدانا دراسة برمجة كنا فاكرين ان الـ Software اللي بيتكتب شبه الـ Document هو عبارة عن سطور مكتوبة تحت بعض وبتتنفذ وخلاص , وكان هدفنا الاساسي اننا نطلع برنامج شغال, ولكن مع تطور صناعة الـ Software ووجود تغييرات مستمرة اتغيرت فكرتنا عن ان صناعة الـ Software.


The Seam Model

خلونا نشوف مع بعض المثال ده ونشوف ازاي نظرتنا اتغيرت دلوقتي عن زمان ونشوف موضوع الـ Seam Model ده ايه ؟

عندنا الكود ده عبارة عن كود مكتوب بلغة الـ C++ , من شكله كده ممكن نتخيل انه عبارة عن Document أو Sheet of Text مش كده ؟ ولكن تخيلوا معايا اننا عاوزين نعمل Run للجزء ده كله ولكن ما عدا الـ Line ده

الـسطر ده فيه PostReceiveError Function Call , فازاي نقدر نـ Run الجزء ده كله ما عدا السطر ده؟

الموضوع ممكن يكون سهل مش كده ؟ هنروح بكل بساطة للكود ونعمل Comment out للجزء ده , أو نششيله خالص.

ولكن في الحقيقة خلونا نـ Focus هنا اكتر على المشكلة اللي احنا بنواجهها دلوقتي ..

احنا عاوزين نتجنب اننا ننفذ الـ Line ده وده لان الـ Function دي هي عبارة عن Global Function بتكلم Subsystem تاني والـ Subsystem ده هيكون صعب جدا اننا نتعامل معاه واحنا بنعمل Testing , فعشان كده احنا عاوزين نتجنب تنفيذ الـ Line ده واحنا بنعمل Testing , ولكن نسمح بتنفيذه عادي في الـ Production .. فهل شايفين دلوقتي المشكلة اللي بنتعامل معاها ؟

وعشان كده الـ Seam Model جه في الاساس عشان النوع ده من المشاكل , فخلونا نشوف مع بعض يعني ايه باه Seam ونشوف مع بعض امثلة توضحلنا المفهوم ده كويس.


💡
الـ Seam هو عبارة عن مكان نقدر من خلاله اننا نغير في الـ Behavior يعني السلوك بتاع البرنامج بتاعنا في المكان ده من غير منغير اي حاجة في المكان ذات نفسه ..

يعني ايه الكلام ده ؟ يعني انا بيكون عندي جزء في الـ Code بتاعي اقدر اغير من سلوكه من غير ماضطر كل شوية اروح اعدل اي حاجة في المكان ده , فمبعنى اصح المكان ده ثابت عادي جدا ولكن اقدر اغير فيه .. طب ازاي باه ؟

خلونا نرجع مع بعض للمثال بتاعنا اللي مكتوب بالـ C++

احنا كنا عاوزين طريقة نقدر من خلالها نشيل الـ Line اللي قولنا عليه في الـ Testing , بس في نفس الوقت عاوزينه يكون موجود في الـ Production عادي وشوفنا مع بعض ان الـ PostReceiveError Function دي كانت Global Function , فهي مش جزء من الـ CAsyncSslRec Class

طب ايه رأيكوا لو احنا زودنا الـ Method دي في الـ Class بتاعتنا بنفس الـ Signature بتاع الـ Function الـ Global وبقينا بنـ Forward الـ Call للـ Global Function عادي جواها , اكننا بدل ما نروح نناديها بشكل Direct في الكود بتاعنا خلينا عندنا Method في الـ Class بنفس اسمها وكل اللي بتعمله الـ Method دي انها هي اللي بتروح تنادي على الـ Global Function ..

طب انا كده استفدت ايه ؟

انا كده استفدت ان بالشكل الآتي اقدر بسهولة جدا اروح اعمل Create لـ Subclass بتورث من الـ Class بتاعتي.

والـ Sub Class دي هيكون فيها الـ Method اللي زودتها بس الـ Implementation بتاعها هيكون فاضي اكنها بتعمل Override على الـ Method دي وهتسيبها فاضية فبالتالي مش هتكلم الـ Global Function خلاص ,,

فزي ماحنا شايفين اقدر دلوقتي اكتب Tests عادي للكود بتاعي من غير ما اثر على اي حاجة بالسلب , والـ Line اللي كان عاملي مشكلة في الاول, مش هيتنفذ لان عندي دلوقتي Test Class بتورث من الـ CLass الاساسية وعندها الـ Method اللي كان فيها مشكلة , هي فاضية مبتعملش اي حاجة , عكس الاساسية اللي بنستعملها في الـ Production واللي بتنادي على الـ Global Function ..


النوع ده من الـ Seam بنسميه Object Seam، فاحنا قدرنا اننا نغير من السلوك بتاع البرنامج دلوقتي , من غير ما نروح نغير اي حاجة في المكان ده نهائي , فالكود لسه مكتوب زي مهو في البرنامج بتاعنا متغيرش.

والـ Object Seam موجودة في الـ Object Oriented Languages وهو نوع من انواع تانية كتيرة للـ Seams.


تقدروا دلوقتي تشتركوا في النشرة الأسبوعية لاقرأ-تِك بشكل مجاني تمامًا عشان يجيلكوا كل جديد بشكل أسبوعي فيما يخص مواضيع متنوعة وبشروحات بسيطة وسهلة وبجودة عالية 🚀

النشرة هيكون ليها شكل جديد ومختلف عن شكلها القديم وهنحاول انها تكون مميزة ومختلفة وخليط بين المحتوى الأساسي اللي بينزل ومفاجآت تانية كتير 🎉

Eqraatech Newsletter | Eqraatech - اقرأ-تِك | Substack
محتوى تقني متميز في مختلف مجالات هندسة البرمجيات باللغة العربية عن طريق تبسيط المفاهيم البرمجية المعقدة بشكل سلس وباستخدام صور توضيحية مذهلة. Click to read Eqraatech Newsletter, a Substack publication with hundreds of subscribers.

Seam Types

انواع الـ Seams بتختلف من لغة للتانية , وافضل طريقة للتعرف عليهم هي اننا نشوف كل الخطوات اللي بيتضمنها تحويل الـ Text بتاع البرنامج بتاعنا لـ Code Runnable , لان كل خطوة من الخطوات دي ممكن تتضمن وجود انواع مختلفة من الـ Seams

هذا المقال مخصص للأعضاء المنتسبين لخطط الاشتراك المدفوعة فقط

اشترك الآن بنشرة اقرأ-تِك الأسبوعية

لا تدع أي شيء يفوتك. واحصل على أحدث المقالات المميزة مباشرة إلى بريدك الإلكتروني وبشكل مجاني!