All tips

معلومة هتفيدك في الـ Interview

Mahmoud Adel Mentor Software Tech-Lead @Foodics ·

معلومة هتفيدك في الـ Interview

لما بتبني هيكل كلاسات معقد زي (Object Hierarchy أو Composite Structure) وتلاقي نفسك كل شوية مضطر تضيف سلوك أو عملية جديدة على الكلاسات دي، هنا بتبدأ المشكلة.

الطريقة التقليدية إنك تدخل جوه كل كلاس وتضيف الـ Method الجديدة، وده كسر صريح للـ Open/Closed Principle، لأنك بتعدل في كود شغال ومختبره زمان لمجرد إنك عايز تعمل Report أو Export بشكل جديد.

عشان كده بقدملك الـ Visitor Design Pattern.

الفكرة الجوهرية للـ Visitor هي فصل الـ Algorithm عن الـ Objects اللي بتشتغل عليها. بدل ما الـ Business Logic تكون جوه كلاسات الداتا، بتفصلها في كلاس منفصل اسمه Visitor.

الميكانيزم بيعتمد على الـ Double Dispatch؛ الـ Element بينادي ميثود الـ Visitor ويبعت نفسه كـ argument visitor.visit(this)، فالـ Visitor ينفذ السلوك المناسب للـ Type من غير instanceof ولا switch-case معقدة.

طيب ايه الفرق بينه وبين الـ Strategy والـ Factory ؟

الفرق جوهري في المشكلة:

  • الـ Strategy بيدي لك كذا طريقة تعمل بيها نفس المهمة وقت الران (زي طرق دفع مختلفة).

  • الـ Factory ملوش علاقة بالسلوك، ده مسؤول عن إنشاء الكائنات وتجريد عملية الـ Instantiation (خدت بالك من تجريد دي؟).

  • الـ Visitor جاي عشان تنفذ عمليات مختلفة ومتنوعة على مجموعة كلاسات ثابتة ومختلفة الأنواع من غير ما تعدل الكلاسات دي نفسها.

امتى تستخدمه؟ لو عندك Object Structure ثابتة ونادرة التغيير (زي عناصر AST أو File System)، بس العمليات بتتغير باستمرار، الـ Visitor بيخليك تضيف عمليات جديدة من غير ما تلمس كلاسات الداتا الأساسية وتعك الدنيا.

لكن خد بالك: لو الهيكل نفسه بيتغير كتير وبتضيف كلاسات جديدة باستمرار، الـ Visitor هيحول الكود لكابوس صيانة، لأن كل كلاس جديد هيجبرك تعدل على كل الـ Visitors الموجودة.

Helpful Comment

Discussion

No comments yet

Ask the mentor about this tip, or add what worked for you. The mentor is notified of every comment.

Join the discussion Sign in to ask a question or reply to other students.
Sign in
No questions yet

No comments yet. Tried this advice? Say how it went.