ConstructiCat Logo
CodeBust.
Browse section ▾

إدخال امتداد محلي (Introduce Local Extension).

Problem

لا تحتوي فئة أدوات (Utility Class) على بعض التوابع التي تحتاجها. ولكن لا يمكنك إضافة هذه التوابع إليها.

Solution

أنشئ فئة جديدة تحتوي على التوابع المطلوبة واجعلها إما فئة فرعية (Subclass) أو فئة مغلفة (Wrapper) لفئة الأدوات.

##Example

قبل
Introduce Local Extension - Before
بعد
Introduce Local Extension - After

##Why Refactor

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

  • إنشاء فئة فرعية (Subclass) من الفئة المعنية، تحتوي على التوابع الجديدة وترث كل شيء آخر من الفئة الأب. هذا الحل أسهل ولكنه قد يتعذر أحياناً بسبب فئة الأدوات نفسها (إذا كانت مصرحة كـ final على سبيل المثال).

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

##Benefits

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

##How to Refactor

  1. أنشئ فئة امتداد جديدة:

    • الخيار أ: اجعلها فئة فرعية (Child class) من فئة الأدوات.

    • الخيار ب: إذا قررت استخدام فئة مغلفة (Wrapper)، فأنشئ حقلاً فيها لتخزين كائن فئة الأدوات الذي سيتم التفويض إليه. عند استخدام هذا الخيار، ستحتاج أيضاً إلى إنشاء توابع تماثل التوابع العامة (Public methods) لفئة الأدوات وتتضمن تفويضاً بسيطاً لتوابع كائن الأدوات.

  2. أنشئ بانيًا (Constructor) يستخدم نفس معاملات باني فئة الأدوات.

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

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

  5. استبدل استخدام فئة الأدوات بفئة الامتداد الجديدة في الأماكن التي تحتاج فيها إلى وظائفها.