ConstructiCat Logo
CodeBust.
Browse section ▾

تغليف المجموعة.

Problem

تحتوي فئة على حقل مجموعة (collection field) ودوال الحصول والتعيين (getter and setter) بسيطة للعمل مع المجموعة.

Solution

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

##Example

قبل
Encapsulate Collection - Before
بعد
Encapsulate Collection - After

##Why Refactor

تحتوي فئة على حقل يحتوي على مجموعة من الكائنات. يمكن أن تكون هذه المجموعة مصفوفة، أو قائمة، أو مجموعة (set)، أو متجهاً (vector). تم إنشاء دوال الحصول والتعيين العادية للعمل مع المجموعة.

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

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

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

##Benefits

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

  • إذا كانت عناصر المجموعة محتواة داخل نوع أولي (primitive type)، مثل المصفوفة، فإنك تنشئ دوال أكثر ملاءمة للعمل مع المجموعة.

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

##How to Refactor

  1. أنشئ دوال لإضافة وحذف عناصر المجموعة. يجب أن تقبل هذه الدوال عناصر المجموعة في معاملاتها.

  2. قم بتعيين مجموعة فارغة للحقل كقيمة أولية إذا لم يتم ذلك في منشئ الفئة.

  3. ابحث عن استدعاءات دالة التعيين لحقل المجموعة. قم بتغيير دالة التعيين بحيث تستخدم عمليات إضافة وحذف العناصر، أو اجعل هذه العمليات تستدعي كود العميل (client code).

لاحظ أنه لا يمكن استخدام دوال التعيين إلا لاستبدال جميع عناصر المجموعة بأخرى. لذلك قد يكون من المستحسن تغيير اسم دالة التعيين (طريقة إعادة تسمية الدالة) إلى replace.

  1. ابحث عن جميع استدعاءات دالة الحصول على المجموعة والتي يتم بعدها تغيير المجموعة. قم بتغيير الكود بحيث يستخدم دوالك الجديدة لإضافة وحذف العناصر من المجموعة.

  2. قم بتغيير دالة الحصول بحيث تعيد تمثيلاً للقراءة فقط (read-only representation) للمجموعة.

  3. افحص كود العميل الذي يستخدم المجموعة بحثاً عن كود قد يبدو أفضل داخل فئة المجموعة نفسها.