نتائج البحث

اذهب إلى التنقل اذهب إلى البحث

عرقلة التغيير (Change Preventers)

قد يكون تطوير بعض الشيفرات مشكلةً حقيقيةً إذ عند إحداث أيّ تغييرٍ في جزءٍ منها لا بُدَّ وأن تتبعه عدّة تغييراتٍ أخرى في أجزاء متفرِّقة، وبالتالي سيصبح تطوير البرنامج شائكًا معقّدًا وبتكلفةٍ غير زهيدةٍ، من معوِّقات التغيير: التغيير المتشعِّب (divergent change) المشكلة: الحاجة لتغيير الكثير من التوابع التي لا علاقة لها بالأمر بمجرَّد إحداث أيّ تغيير في الصنف. الحل: عزل سلوك الصنف عبر إنشاء صنفٍ جديدٍ، أو دمج الأصناف عبر الوراثة وذلك باستخراج الصنف الأعلى (superclass) أو استخراج الصنف الفرعيّ عند وجود أصناف مختلفةٍ ...

سحب التابع لأعلى (Pull Up Method)

المشكلة تحتوي الأصناف الفرعية على توابع تؤدي نفس العمل. الحل جعل التوابع متطابقة ثم نقلها إلى الصنف الأعلى ذي الصلة. مثال قبل إعادة التصميم يحتوي الصنفان الفرعيان Soldier و Tank على التابع ()getHealth الذي يؤدي نفس العمل: تحتوي الأصناف الفرعية على التابع ()getHealth تؤدي نفس العمل. بعد إعادة التصميم نقل التابع ()getHealth إلى الصنف Unit الأب وإزالته من الأصناف الفرعية: نقل التابع ()getHealth إلى الصنف الأعلى. لم إعادة التصميم؟ تنمو الأصناف الفرعية وتتطور بشكل مستقل عن بعضها البعض، مما يتسبب ...

سحب الحقل لأعلى (Pull Up Field)

المشكلة يحتوي صنفان على نفس الحقل. الحل إزالة الحقل من الأصناف الفرعية ونقله إلى الصنف الأعلى. مثال قبل إعادة التصميم يحتوي الصنفان Tank و Soldier المتفرعان من الصنف Unit على الحقل المشترك health: يحتوي الصنفان Soldier و Tank على نفس الحقل health. بعد إعادة التصميم إزالة الحقل health من الأصناف الفرعية (الصنف Soldier والصنف Tank) ونقله إلى الصنف Unit الأب: إزالة الحقل health من الأصناف الفرعية ونُقل إلى الصنف الأب. لم إعادة التصميم؟ تنمو الأصناف الفرعية وتتطور بشكل منفصل، مما ...

استبدال المُنشئ بتابع التصميم (Replace Constructor with Factory Method)

المشكلة لديك مُنشئ (constructor) معقد يقوم بما هو أكثر من مجرد وضع قيم المعامل في حقول الكائن. الحل إنشاء تابع تصميم واستخدامه لاستبدال استدعاءات المُنشئ. مثال قبل إعادة التصميم وجود منشئ معقد للصنف Employee: في لغة Java: class Employee { Employee(int type) { this.type = type; } //... } في لغة C#‎: public class Employee { public Employee(int type) { this.type = type; } //... } في لغة PHP: class ...

مشكلات أخرى (Other Smells)

ستجد في هذا القسم الاختلالات والمشكلات التي لا تنحصر في صنف محدَّد وهي: أصناف المكتبة غير الكافية (Incomplete Library Classes) المشكلة: لا تلبِّي أصناف المكتبة كافّة احتياجات البرنامج مع استمرار تطوُّره، ولا يمكن تعديلها لأنّها مُخصَّصةٌ للقراءة فقط. الحل: تعريف التوابع الدخيلة، أو تعريف الإضافات المحليّة. انظر أيضًا المبالغة والإطالة الاستخدام الخطأ لمبادئ البرمجة كائنية التوجه عرقلة التغيير الأجزاء الفائضة  الروابط الازدواجية مصادر [1]صفحة توثيق مشكلات أخرى في موقع refactoring.guru.

اختلال الشيفرات ومشاكلها (Code Smells)

قد تعاني الشيفرات الكثير من الاختلالات والمشاكل الشكلية؛ فبمجرد اكتشاف تلك الاختلالات الظاهرية، يسهل علينا معرفة العلاج (التقنيات) وتطبيقه (إعادة التصميم) للحصول على شيفرة سليمة نظيفة. من هذه الاختلالات: المبالغة والإطالة قد يزداد حجم الشيفرات والتوابع (methods) والأصناف (classes) ازديادًا كبيرًا ليصل لمرحلةٍ يصعُب التعامل معها، ولا يحدث هذا بشكلٍ فجائيِّ دفعةً واحدةً، بل يكون ناتجًا عن تراكم الإضافات أثناء تطوير البرنامج (وخاصةً عندما لا يبذل أحدٌ جهدًا للحدِّ من ذلك التشعب)، ويبدو هذا التضخم واضحًا التوابع الطويلة (long methods): ...

أصناف المكتبة غير الكافية (Incomplete Library Classes)

توصيف المشكلة لا تلبِّي أصناف المكتبة (library classes) كافّة احتياجات البرنامج مع استمرار تطوُّره، ولا يمكن تعديلها لأنّها مُخصَّصةٌ للقراءة فقط (read-only). أسبابها عدم تزويد مُطوِّر المكتبة كافَّةَ الميّزات (features) التي تحتاجها في البرنامج أو امتناعه عن تعريفَ استخدامها (implement). وما الحل؟ لتعريف بعض التوابع (methods) في المكتبة عليك بتعريف التوابع الدخيلة (introduce foreign methods). أمّا لإجراء تغييراتٍ واسعةٍ في صنف المكتبة فعليك بتعريف الإضافات المحليّة (introduce local extensions). إليك المزيد سيكون حلُّ المشكلة كفيلًا بالتقليل من تكرار الشيفرات (duplications)، ...

إنشاء التوابع (Composing Methods)

تستهدف إعادة التصميم بشكل رئيسيٍّ إنشاء التوابع الصحيحة المناسبة، إذ تكون التوابع الطويلة سببًا للمشاكل في كثيرٍ من الحالات، وتجعل شيفرات بعض التوابع منطق التنفيذ (execution logic) غامضًا ويصبح التابع بهذا عصيَّ الفهم من جهةٍ وصعب التغييرٍ من جهة ثانية. يشمل هذا القسم من الحلول كلَّ ما يتعلق بالتوابع وإزالة التكرار (duplicates) في الشيفرة ليسمح بإجراء التطويرات المستقبليّة، وهذه التقنيات هي: استخراج التوابع (Extract Methods) المشكلة: وجود أجزاء من الشيفرة يُمكن عزلها وتجميعها سويةً. الحل: نقل الشيفرة إلى تابعٍ (method) ...

إنشاء التوابع (Composing Methods)

تستهدف إعادة التصميم بشكل رئيسيٍّ إنشاء التوابع الصحيحة المناسبة، إذ تكون التوابع الطويلة سببًا للمشاكل في كثيرٍ من الحالات، وتجعل شيفرات بعض التوابع منطق التنفيذ (execution logic) غامضًا ويصبح التابع بهذا عصيَّ الفهم من جهةٍ وصعب التغييرٍ من جهة ثانية. يشمل هذا القسم من الحلول كلَّ ما يتعلق بالتوابع وإزالة التكرار (duplicates) في الشيفرة ليسمح بإجراء التطويرات المستقبليّة، وهذه التقنيات هي: استخراج التوابع (Extract Methods) المشكلة: وجود أجزاء من الشيفرة يُمكن عزلها وتجميعها سويةً. الحل: نقل الشيفرة إلى تابعٍ (method) ...

سطر أوامر ريلز

بعد قراءة هذا الدّليل، ستتمكّن من: إنشاء تطبيق ريلز. توليد النماذج، ووحدات التحكّم، وتهجيرات قاعدة البيانات (database migrations)، ووحدات الاختبار. بدء الخادم الإنتاجي. كيفية تجربة الكائنات من خلال صدفة تفاعليّة (interactive shell) يفترض هذا الدليل أن لديك معرفة أساسية بإطار العمل ريلز من قراءة دليل البدء مع ريلز. أساسيات سطر الأوامر هناك بضعة أوامر تُعتبر حاسمة للغاية لاستخدامك اليومي لإطار العمل ريلز. هذا الأوامر مرتّبة حسب كثرة استخدامها تقريبًا بالشكل التالي: rails console rails server bin/rails rails generate rails dbconsole ...

الدليل التطبيقي

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

عرض (100 السابقة | 100 التالية) (20 | 50 | 100 | 250 | 500).