ConstructiCat Logo
CodeBust.
Browse section ▾

تغيير الارتباط أحادي الاتجاه إلى ثنائي الاتجاه.

Problem

لديك فئتان تحتاج كل منهما إلى استخدام ميزات الفئة الأخرى، ولكن الارتباط بينهما أحادي الاتجاه فقط.

Solution

قم بإضافة الارتباط المفقود إلى الفئة التي تحتاجه.

##Example

قبل
Change Unidirectional Association to Bidirectional - Before
بعد
Change Unidirectional Association to Bidirectional - After

##Why Refactor

في الأصل، كان للفئات ارتباط أحادي الاتجاه. ولكن مع مرور الوقت، احتاج كود العميل إلى الوصول إلى كلا جانبي الارتباط.

##Benefits

  • إذا كانت الفئة بحاجة إلى ارتباط عكسي، فيمكنك ببساطة حسابه. ولكن إذا كانت هذه الحسابات معقدة، فمن الأفضل الاحتفاظ بالارتباط العكسي.

##How to Refactor

  1. أضف حقلاً للاحتفاظ بالارتباط العكسي.

  2. حدد أي فئة ستكون "المهيمنة" (dominant). ستحتوي هذه الفئة على الدوال التي تنشئ أو تحدث الارتباط عند إضافة العناصر أو تغييرها، مما يؤسس الارتباط في فئتها ويستدعي الدوال المساعدة لتأسيس الارتباط في الكائن المرتبط.

  3. أنشئ دالة مساعدة (utility method) لتأسيس الارتباط في الفئة "غير المهيمنة" (non-dominant). يجب أن تستخدم الدالة ما تم تمريره في المعاملات لإكمال الحقل. امنح الدالة اسماً واضحاً حتى لا تُستخدم لاحقاً لأي أغراض أخرى.

  4. إذا كانت الدوال القديمة للتحكم في الارتباط أحادي الاتجاه موجودة في الفئة "المهيمنة"، فقم بتدعيمها باستدعاءات للدوال المساعدة من الكائن المرتبط.

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