الفرق بين المراجعتين ل"Refactoring/change unidirectional association to bidirectional"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: تغيير الاقتران أحادي الاتجاه إلى ثنائي الاتجاه (Change Unidirectional Association to Bidirectional)}}<...')
 
ط (مراجعة)
 
(5 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE: تغيير الاقتران أحادي الاتجاه إلى ثنائي الاتجاه (Change Unidirectional Association to Bidirectional)}}</noinclude>
 
<noinclude>{{DISPLAYTITLE: تغيير الاقتران أحادي الاتجاه إلى ثنائي الاتجاه (Change Unidirectional Association to Bidirectional)}}</noinclude>
== المشكلة ==
+
==المشكلة==
 
وجود صنفان يحتاج كل منهما إلى استخدام ميزات الآخر، ولكن الاقتران بينهما أحادي الاتجاه فقط.
 
وجود صنفان يحتاج كل منهما إلى استخدام ميزات الآخر، ولكن الاقتران بينهما أحادي الاتجاه فقط.
 +
==الحل==
 +
إضافة الاقتران المفقود إلى الصنف الذي يحتاج إليه.
  
== الحل ==
+
=== مثال ===
أضافه الاقتران المفقود إلى الصنف الذي يحتاج إليه.
 
  
== لم إعادة التصميم؟ ==
+
==== قبل إعادة التصميم ====
في الأصل كان اقتران الأصناف أحادي الاتجاه. ولكن مع الوقت، احتاجت شيفرة العميل إلى الوصول إلى طرفي الاقتران.
+
يحتاج الصنفان <code>Customer</code> و <code>Order</code> أحدهما الآخر ولكن الاقتران بينهما أحادي الاتجاه:[[ملف:Change Unidirectional Association to Bidirectional - Before.png|alt=الاقتران بين الصنفين أحادي الاتجاه فقط.|بدون|تصغير|الاقتران بين الصنفين أحادي الاتجاه فقط.]]
  
== فوائد تطبيق الحل ==
+
==== بعد إعادة التصميم ====
* إذا احتاج صنف إلى اقتران عكسي، يمكنك حسابه ببساطة. ولكن إذا كانت هذه الحسابات معقدة، فمن الأفضل الحفاظ على الاقتران العكسي.
+
إضافة الاقتران الناقص إلى الصنف <code>Customer</code>:[[ملف:Change Unidirectional Association to Bidirectional - After.png|بديل=الاقتران المفقود مُضاف إلى الصنف الذي يحتاج إليه.|بدون|تصغير|الاقتران المفقود مُضاف إلى الصنف الذي يحتاج إليه.]]
  
== مساوئ تطبيق الحل ==
+
==لم إعادة التصميم؟==
* الاقترانات ثنائية الاتجاه أصعب بكثير في التنفيذ والصيانة عن الاقترانات أحادية الاتجاه.
+
في الأصل، كان اقتران الأصناف أحادي الاتجاه. ولكن مع الوقت، احتاجت شيفرة العميل إلى الوصول إلى طرفي الاقتران.
* الاقترانات ثنائية الاتجاه تُنشئ اعتمادًا متبادلُا بين الأصناف. مع الاقتران أحادي الاتجاه، يمكن استخدام أحدهما بشكل مستقل عن الآخر.
+
==فوائد تطبيق الحل==
 +
*إذا احتاج صنف إلى اقتران عكسي، يمكنك حسابه ببساطة. ولكن إذا كانت هذه الحسابات معقدة، فمن الأفضل الحفاظ على الاقتران العكسي.
 +
==مساوئ تطبيق الحل==
 +
*الاقترانات ثنائية الاتجاه (bidirectional associations) أصعب بكثير في التنفيذ والصيانة عن الاقترانات أحادية الاتجاه (unidirectional associations).
 +
*الاقترانات ثنائية الاتجاه تُنشئ اعتمادًا متبادلُا بين الأصناف. مع الاقتران أحادي الاتجاه، يمكن استخدام أحدهما بشكل مستقل عن الآخر.
 +
==آلية الحل==
 +
#أضف حقلًا لعقد الاقتران العكسي.
 +
#حدد الصنف التي سيكون "مهيمنًا". سيحتوي هذا الصنف علي التوابع التي تُنشئ أو تُحدِّث الاقتران طالما أضيفت عناصر أو تغيرت، مؤسِسةً الاقتران في صنفها ومُستدعيةً توابع مساعدة لتأسيس الاقتران في الكائن المقترن.
 +
#أنشئ تابعًا مساعدًا لتأسيس الاقتران في الصنف "غير المهيمن". يجب أن يستخدم التابع ما هو مُعيَّن في المعاملات لاستكمال الحقل. اعط التابع اسمًا واضحًا بحيث لا يستخدم لاحقًا لأي أغراض أخرى.
 +
#إذا كانت التوابع القديمة المتحكمة في الاقتران أحادي الاتجاه في الصنف "المهيمن"، أكملها باستدعاءات لتوابع مساعدة من الكائن المقترن.
 +
#إذا كانت التوابع القديمة المتحكمة في الاقتران أحادي الاتجاه في الصنف "غير المهيمن"، أنشئ توابع في الصنف "المهيمن"، واستدعها، وفوِّض لها التنفيذ.
 +
==انظر أيضًا==
 +
* [[Refactoring/change bidirectional association to unidirectional|تغيير الاقتران ثنائي الاتجاه إلى أحادي الاتجاه]].
  
== آلية الحل ==
+
==مصادر==
# أضف حقل لعقد الاقتران العكسي.
+
*[https://refactoring.guru/change-unidirectional-association-to-bidirectional صفحة توثيق تغيير الاقتران أحادي الاتجاه إلى ثنائي الاتجاه في موقع refactoring.guru].
# حدد الصنف التي سيكون "مهيمنًا". سيحتوي هذا الصنف علي التوابع التي تُنشئ أو تُحدِّث الاقتران طالما أضيفت عناصر أو تغيرت، مؤسِسةً الاقتران في صنفها ومُستدعيةً توابع مساعدة لتأسيس الاقتران في الكائن المقترن.
 
# أنشئ تابع مساعد لتأسيس الاقتران في الصنف "غير المهيمن". يجب أن يستخدم التابع ما هو مُعيَّن في المعاملات لاستكمال الحقل. اعط التابع اسمًا واضحًا بحيث لا يستخدم لاحقًا لأي أغراض أخرى.
 
# إذا كانت التوابع القديمة المتحكمة في الاقتران أحادي الاتجاه في الصنف "المهيمن"، أكملها باستدعاءات لتوابع مساعدة من الكائن المقترن.
 
# إذا كانت التوابع القديمة المتحكمة في الاقتران أحادي الاتجاه في الصنف "غير المهيمن"، أنشئ توابع في الصنف "المهيمن"، واستدعها، وفوِّض لها التنفيذ.
 
 
 
== انظر أيضًا ==
 
 
 
== مصادر ==
 
* صفحة توثيق تغيير الاقتران أحادي الاتجاه إلى ثنائي الاتجاه في موقع refactoring.guru.
 
 
[[تصنيف:Refactoring]]
 
[[تصنيف:Refactoring]]
 
[[تصنيف:Refactoring Techniques]]
 
[[تصنيف:Refactoring Techniques]]
 
[[تصنيف:Refactoring Organizing Data]]
 
[[تصنيف:Refactoring Organizing Data]]

المراجعة الحالية بتاريخ 10:52، 2 مارس 2019

المشكلة

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

الحل

إضافة الاقتران المفقود إلى الصنف الذي يحتاج إليه.

مثال

قبل إعادة التصميم

يحتاج الصنفان Customer و Order أحدهما الآخر ولكن الاقتران بينهما أحادي الاتجاه:

الاقتران بين الصنفين أحادي الاتجاه فقط.
الاقتران بين الصنفين أحادي الاتجاه فقط.

بعد إعادة التصميم

إضافة الاقتران الناقص إلى الصنف Customer:

الاقتران المفقود مُضاف إلى الصنف الذي يحتاج إليه.
الاقتران المفقود مُضاف إلى الصنف الذي يحتاج إليه.

لم إعادة التصميم؟

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

فوائد تطبيق الحل

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

مساوئ تطبيق الحل

  • الاقترانات ثنائية الاتجاه (bidirectional associations) أصعب بكثير في التنفيذ والصيانة عن الاقترانات أحادية الاتجاه (unidirectional associations).
  • الاقترانات ثنائية الاتجاه تُنشئ اعتمادًا متبادلُا بين الأصناف. مع الاقتران أحادي الاتجاه، يمكن استخدام أحدهما بشكل مستقل عن الآخر.

آلية الحل

  1. أضف حقلًا لعقد الاقتران العكسي.
  2. حدد الصنف التي سيكون "مهيمنًا". سيحتوي هذا الصنف علي التوابع التي تُنشئ أو تُحدِّث الاقتران طالما أضيفت عناصر أو تغيرت، مؤسِسةً الاقتران في صنفها ومُستدعيةً توابع مساعدة لتأسيس الاقتران في الكائن المقترن.
  3. أنشئ تابعًا مساعدًا لتأسيس الاقتران في الصنف "غير المهيمن". يجب أن يستخدم التابع ما هو مُعيَّن في المعاملات لاستكمال الحقل. اعط التابع اسمًا واضحًا بحيث لا يستخدم لاحقًا لأي أغراض أخرى.
  4. إذا كانت التوابع القديمة المتحكمة في الاقتران أحادي الاتجاه في الصنف "المهيمن"، أكملها باستدعاءات لتوابع مساعدة من الكائن المقترن.
  5. إذا كانت التوابع القديمة المتحكمة في الاقتران أحادي الاتجاه في الصنف "غير المهيمن"، أنشئ توابع في الصنف "المهيمن"، واستدعها، وفوِّض لها التنفيذ.

انظر أيضًا

مصادر