ConstructiCat Logo
CodeBust.
Browse section ▾

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

Problem

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

Solution

قم بإزالة الارتباط غير المستخدم.

##Example

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

##Why Refactor

يصعب عموماً صيانة الارتباط ثنائي الاتجاه مقارنة بالارتباط أحادي الاتجاه، حيث يتطلب كوداً إضافياً لإنشاء وحذف الكائنات ذات الصلة بشكل صحيح. هذا يجعل البرنامج أكثر تعقيداً.

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

مثال: يقوم جامع القمامة بإزالة الكائنات من الذاكرة التي لم تعد كائنات أخرى تشير إليها. لنفترض أنه تم إنشاء زوج من الكائنات User-Order واستخدامه ثم التخلي عنه. ولكن لن يتم مسح هذه الكائنات من الذاكرة لأنها لا تزال تشير إلى بعضها البعض. ومع ذلك، أصبحت هذه المشكلة أقل أهمية بفضل التقدم في لغات البرمجة، والتي تحدد الآن تلقائياً مراجع الكائنات غير المستخدمة وتزيلها من الذاكرة.

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

##Benefits

  • يبسط الفئة التي لا تحتاج إلى العلاقة. كود أقل يعني صيانة كود أقل.

  • يقلل التبعية بين الفئات. الفئات المستقلة أسهل في الصيانة لأن أي تغييرات في الفئة تؤثر على تلك الفئة فقط.

##How to Refactor

  1. تأكد من صحة أحد الشروط التالية لفئاتك:

    • لا يتم استخدام أي ارتباط.

    • هناك طريقة أخرى للحصول على الكائن المرتبط، مثل الاستعلام من قاعدة البيانات.

    • يمكن تمرير الكائن المرتبط كوسيط (argument) للدوال التي تستخدمه.

  2. اعتماداً على حالتك، يجب استبدال استخدام حقل يحتوي على ارتباط بكائن آخر بمعامل (parameter) أو استدعاء دالة للحصول على الكائن بطريقة مختلفة.

  3. احذف الكود الذي يقوم بتعيين الكائن المرتبط إلى الحقل.

  4. احذف الحقل الذي أصبح غير مستخدم الآن.