الفرق بين المراجعتين ل"Refactoring/change value to reference"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
ط
ط
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: تبديل قيم البيانات إلى كائنات (Change Value to Reference)}}</noinclude>
+
== توصيف المشكلة==
== توصيف المشكلة ==
 
 
عند وجود العديد من المثيلات المتطابقة من صنفٍ واحد تحتاج إلى استبدالها بكائنٍ واحد.
 
عند وجود العديد من المثيلات المتطابقة من صنفٍ واحد تحتاج إلى استبدالها بكائنٍ واحد.
 
+
==الحل==
== الحل ==
 
 
تحويل الكائنات المتطابقة إلى كائن مرجعي واحد.
 
تحويل الكائنات المتطابقة إلى كائن مرجعي واحد.
 
+
==لم إعادة التصميم؟==
== لماذا إعادة التصميم ==
 
 
في العديد من الأنظمة، يمكن تصنيف الكائنات علي إنها إمَّا قيم أو مراجع.
 
في العديد من الأنظمة، يمكن تصنيف الكائنات علي إنها إمَّا قيم أو مراجع.
* المراجع: عندما يتوافق كائن واحد في العالم الحقيقي مع كائنٍ واحدٍ فقط في البرنامج. عادةً ما تكون المراجعُ كائنات مثل المستخدم/النظام/المنتج الخ.
+
*المراجع: عندما يتوافق كائن واحد في العالم الحقيقي مع كائنٍ واحدٍ فقط في البرنامج. عادةً ما تكون المراجعُ كائنات مثل المستخدم/النظام/المنتج الخ.
* القيم: عندما يتوافق كائن واحد في العالم الحقيقي مع كائنات متعددة في البرنامج. ويمكن أن تكون هذه الكائنات التواريخ وأرقام الهواتف والعناوين والألوان وما شابه ذلك.
+
*القيم: عندما يتوافق كائن واحد في العالم الحقيقي مع كائنات متعددة في البرنامج. ويمكن أن تكون هذه الكائنات التواريخ وأرقام الهواتف والعناوين والألوان وما شابه ذلك.
 
لا يكون اختيار المرجع مقابل القيمة دائمًا واضح المعالم. في بعض الأحيان يكون هناك قيمة بسيطة مع كمية صغيرة من البيانات التي لا تتغير. ثم يصبح من الضروري إضافة بيانات قابلة للتغيير وتمرير هذه التغييرات في كل مرة يُوصَل فيها إلى الكائن. في هذه الحالة يصبح من الضروري تحويلها إلى مراجع.
 
لا يكون اختيار المرجع مقابل القيمة دائمًا واضح المعالم. في بعض الأحيان يكون هناك قيمة بسيطة مع كمية صغيرة من البيانات التي لا تتغير. ثم يصبح من الضروري إضافة بيانات قابلة للتغيير وتمرير هذه التغييرات في كل مرة يُوصَل فيها إلى الكائن. في هذه الحالة يصبح من الضروري تحويلها إلى مراجع.
 
+
==فوائد تطبيق الحل==
== الفوائد ==
+
*يحتوي الكائن على كافة المعلومات الحالية حول كيان معين. إذا تغير الكائن في أحد أجزاء البرنامج، يمكن الوصول إلى هذه التغييرات من الأجزاء الأخرى من البرنامج التي تستخدم هذا الكائن.
* يحتوي الكائن على كافة المعلومات الحالية حول كيان معين. إذا تغير الكائن في أحد أجزاء البرنامج، يمكن الوصول إلى هذه التغييرات من الأجزاء الأخرى من البرنامج التي تستخدم هذا الكائن.
+
==مساوئ تطبيق الحل==
 
+
*من الصعب جدًا تنفيذ المراجع.
== العيوب ==
+
==آلية الحل==
* من الصعب جدًا تنفيذ المراجع.
+
#استخدام [[Refactoring/replace constructor with factory method|استبدال المُنشِئ بتابع التصميم]] مع الصنف الذي تُنشأ منه المراجع.
 
+
#تحديد الكائن الذي سيكون مسؤولًا عن توفير الوصول إلى المراجع. بدلًا من إنشاء كائن جديد، عندما تحتاج واحدًا تصبح بحاجة الآن للحصول عليه من كائن تخزين أو حقل قاموس ثابت.
== كيفية إعادة التصميم ==
+
#تحديد ما إذا كانت المراجع ستُنشَأ مسبقًا أو بشكل ديناميكي حسب الضرورة. إذا أُنشئت الكائنات مسبقًا، يجب التأكد من تحميلها قبل الاستخدام.
# استخدام [[Refactoring/replace constructor with factory method|استبدال المُنشِئ بتابع التصميم]] مع الصنف الذي تُنشأ منه المراجع.
+
#تغيير تابع التصميم بحيث يُعيد مرجعًا. إذا أُنشئت الكائنات مسبقًا، حدد كيفية التعامل مع الأخطاء عند طلب كائن غير موجود. قد تحتاج أيضا إلى استخدام [[Refactoring/rename method|تابع إعادة التسمية]] للإبلاغ بأن التابع يُعيد الكائنات الموجودة فقط.
# تحديد الكائن الذي سيكون مسؤولًا عن توفير الوصول إلى المراجع. بدلًا من إنشاء كائن جديد، عندما تحتاج واحدًا تصبح بحاجة الآن للحصول عليه من كائن تخزين أو حقل قاموس ثابت.
+
==انظر أيضًا==
# تحديد ما إذا كانت المراجع ستُنشَأ مسبقًا أو بشكل ديناميكي حسب الضرورة. إذا أُنشئت الكائنات مسبقًا، يجب التأكد من تحميلها قبل الاستخدام.
+
*[[Refactoring/replace constructor with factory method|استبدال المُنشِئ بتابع التصميم]].
# تغيير تابع التصميم بحيث يُعيد مرجعًا. إذا أُنشئت الكائنات مسبقًا، حدد كيفية التعامل مع الأخطاء عند طلب كائن غير موجود. قد تحتاج أيضا إلى استخدام [[Refactoring/rename method|تابع إعادة التسمية]] للإبلاغ بأن التابع يُعيد الكائنات الموجودة فقط.
+
*[[Refactoring/rename method|تابع إعادة التسمية]].
 
+
*العملية المُعاكسة [[Refactoring/change reference to value|تبديل الكائنات إلى قيم البيانات]].
== انظر أيضًا ==
+
==مصادر==
* [[Refactoring/replace constructor with factory method|استبدال المُنشِئ بتابع التصميم]].
+
*[https://refactoring.guru/change-value-to-reference صفحة توثيق تغيير القيمة إلى مرجع في موقع refactoring.guru].
* [[Refactoring/rename method|تابع إعادة التسمية]].
 
* العملية المُعاكسة [[Refactoring/change reference to value|تبديل الكائنات إلى قيم البيانات]].
 
 
 
== مصادر ==
 
* [https://refactoring.guru/change-value-to-reference صفحة توثيق تغيير القيمة إلى مرجع في موقع refactoring.guru].
 
 
[[تصنيف:Refactoring]]
 
[[تصنيف:Refactoring]]
 
[[تصنيف:Refactoring Techniques]]
 
[[تصنيف:Refactoring Techniques]]
 
[[تصنيف:Refactoring Organizing Data]]
 
[[تصنيف:Refactoring Organizing Data]]

مراجعة 13:07، 11 نوفمبر 2018

 توصيف المشكلة

عند وجود العديد من المثيلات المتطابقة من صنفٍ واحد تحتاج إلى استبدالها بكائنٍ واحد.

الحل

تحويل الكائنات المتطابقة إلى كائن مرجعي واحد.

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

في العديد من الأنظمة، يمكن تصنيف الكائنات علي إنها إمَّا قيم أو مراجع.

  • المراجع: عندما يتوافق كائن واحد في العالم الحقيقي مع كائنٍ واحدٍ فقط في البرنامج. عادةً ما تكون المراجعُ كائنات مثل المستخدم/النظام/المنتج الخ.
  • القيم: عندما يتوافق كائن واحد في العالم الحقيقي مع كائنات متعددة في البرنامج. ويمكن أن تكون هذه الكائنات التواريخ وأرقام الهواتف والعناوين والألوان وما شابه ذلك.

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

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

  • يحتوي الكائن على كافة المعلومات الحالية حول كيان معين. إذا تغير الكائن في أحد أجزاء البرنامج، يمكن الوصول إلى هذه التغييرات من الأجزاء الأخرى من البرنامج التي تستخدم هذا الكائن.

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

  • من الصعب جدًا تنفيذ المراجع.

آلية الحل

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

انظر أيضًا

مصادر