نتائج البحث

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

الروابط الازدواجية (Couplers)

يتلخّص هذا الجانب بعواقب إنشاء رابطٍ شديدٍ ازدواجيّ (ما بين صنفين [classes])، أو قد تظهر بدائل عنه كالتفويض المفرط (excessive delegation)، وتتمثل هذه المشكلة بالنقاط الآتية: التسلط على الكائنات الأخرى (feature envy) المشكلة: استخدام بعضُ التوابع بياناتِ الكائنات الأخرى أكثر ممّا تستخدم بياناتِها ذاتَها. الحل: إبقاء الأجزاء التي تتغيَّر بآنٍ واحدٍ في المكان ذاته معًا عبر نقلُ التوابع، أو استخراجُ التوابع. الارتباط الوثيق غير المناسب (inappropriate intimacy) المشكلة: استخدام أحد الأصناف الحقولَ والتوابعَ الداخليّة لصنفٍ آخر بكثرة. الحل: نقلُ التوابع ونقل ...

إخفاء التفويض (Hide Delegate)

المشكلة يصل العميل (client) إلى كائنٍ (object) ما وليكن الكائن B من أحد حقول (fields) أو توابع (methods) كائنٍ آخر وليكن A، ومن ثمّ يستدعي تابعًا لهذا الكائن B. الحل إنشاء تابعٍ جديدٍ في الصنف A والذي يُفضي إلى استدعاءٍ للكائن B، وبهذا لن يعلم العميل تفاصيل التفويض (delegation) للكائن B ولن يعتمد على ذلك. مثال قبل إعادة التصميم يتعامل صنف العميل (client class) مع صنفين، الأول صنف الأقسام (Department) والثاني صنف الأشخاص (Person) واللذان يحتويان تابعين للحصول على كائنٍ ...

تغليف المجموعات (Encapsulate Collection)

المشكلة صنف يحتوي على حقل مجموعة وجالب (getter) وضابط (setter) بسيط للعمل مع المجموعة. الحل ضبط القيمة المعادة من الجالب لتكون للقراءة فقط وإنشاء توابع لإضافة/حذف عناصر المجموعة. مثال قبل إعادة التصميم يحتوي الصنف Person على جالب getCourses وضابط setCourses بسيطين للتحكم بالدروس التي سجل بها الشخص: صنف يحتوي على حقل مجموعة وجالب (getter) وضابط (setter) بسيط للعمل مع المجموعة. بعد إعادة التصميم ضبط القيمة المعادة من الجالب setCourses لتصبح للقراءة فقط وإضافة تابعين جديدين أحدهما لإضافة دروس جديدة للشخص ...

استبدال الأصناف الفرعية بالحقول (Replace Subclass with Fields)

المشكلة لديك أصناف فرعية تختلف فقط في توابع (إعادة الثوابت) الخاصة بها. الحل استبدال التوابع بالحقول في الصنف الأب وحذف الأصناف الفرعية. مثال قبل إعادة التصميم لدينا الصنف Person الذي يحتوي على الصنفيين الفرعيين Male و Female؛ يختلف هذان الصنفان في القيمة المعادة فقط. يحتوي الصنف Person يحتوي على الصنفيين الفرعيين Male و Female. بعد إعادة التصميم وضع حقول في الصنف Person الأب مكان مقابلة لحقول الصنف الفرعي Male و Female ثم حذف هذان الصنفان. حذف الصنفان الفرعيان Male و ...

نقل الحقول (Move Fields)

المشكلة استخدام الحقل (field) في صنفٍ (class) ما أكثر من استخدامه في صنفه الأساسيّ. الحل إنشاء حقلٍ في صنفٍ جديدٍ وإعادة توجيه (redirect) كلَّ ما يستخدم هذا الحقل إلى ذلك الصنف المُنشَأ. مثال قبل إعادة التصميم يستخدِم الصنفُ Class2 الحقلَ aField أكثر مما يستخدمه صنفه الأساسيّ Class1: يستخدِم الصنفُ Class2 الحقلَ aField أكثر مما يستخدمه صنفه الأساسيّ Class1. بعد إعادة التصميم نُقِل الحقل aField إلى الصنف ذي الاستخدام الأكثر له وهو الصنف Class2: نُقِل الحقل aField إلى الصنف ذي الاستخدام ...

تبديل المرجع إلى قيمة (Change Reference to Value)

المشكلة وجود كائن مرجع صغير جدًا نادرًا ما يتغيَّر لتبرير إدارة دورة حياته. الحل تحويله إلى كائن قيمة (value object). مثال قبل إعادة التصميم مخطط يوضح كيفية ارتباط الصنفين Currency و Customer: مخطط يوضح كيفية ارتباط الصنفين Currency و Customer. بعد إعادة التصميم إعادة تصميم المخطط السابق للتتحول العلاقة الرابطة للصنفين Currency و Customer إلى علاقة has a (أي بمجرد وجود كائن Customer فلا بد من وجود كائن Currency له). مخطط يوضح كيفية ارتباط الصنفين Currency و Customer بعلاقة has ...

نقل التابع (Move Method)

المشكلة استخدام التابع (method) في صنفٍ (class) ما أكثر من استخدامه في صنفه الأساسيّ. الحل إنشاء تابعٍ جديدٍ في الصنف الأكثر استخدامًا لذلك التابع ونقل شيفرته إلى التابع الجديد، ثم تحويل الشيفرة في التابع الأصليّ إلى مرجعيّةٍ للتابع الجديد في الصنف الآخر أو حذفه كليَّا. مثال قبل إعادة التصميم يستخدِم الصنفُ Class2 التابعَ aMethod()‎ أكثر مما يستخدمه صنفه الأساسيّ Class1: يستخدِم الصنفُ Class2 التابعَ aMethod()‎ أكثر مما يستخدمه صنفه الأساسيّ Class1. بعد إعادة التصميم نُقِل التابع aMethod()‎ إلى الصنف ذي ...

تبديل الأعداد السحرية بثوابت رمزية (Replace Magic Number with Symbolic Constant)

المشكلة تستخدم الشيفرة البرمجية عددًا له معنىً معين له. الحل استبدال هذا العدد بثابت له اسم يمكن قراءته ويشرح معنى العدد. مثال قبل إعادة التصميم تستخدم الشيفرة التالية العدد 9.81 بالشكل المجرَّد الذي يمثِّل ثابت الجاذبية الأرضية: في لغة Java: double potentialEnergy(double mass, double height) { return mass * height * 9.81; } في لغة C#‎: double PotentialEnergy(double mass, double height) { return mass * height * 9.81; } في لغة PHP: function potentialEnergy($mass, $height) { return $mass * $height * ...

البيانات المُجمَّعة (Data Clumps)

توصيف المشكلة تكرار مجموعةٍ من المتغيِّرات (variables) (كتلك المُستخدَمة كمعاملاتٍ [parameters] للربط مع قاعدة البيانات مثلًا) بشكلٍ متطابقٍ تمامًا في عدّة أجزاء من الشيفرة، إذ يجب تحويل تلك المجموعات إلى أصنافها (classes) الخاصّة بها. أسبابها تُعزى المشكلة عمومًا للبُنية (structure) البرمجيّة الضعيفة (أو ما يُعرف بمصطلح copypasta programming)، وللتحقُّقِ من وجود هذه المشكلة بالشيفرة احذف إحدى القيم، فإنْ حدث خللٌ نتيجة الحذف فالمشكلة قائمة ويجب علاجها، وإلّا فتلك إشارةٌ حسنةٌ ومن المحبَّذ تجميعُ هذه المتغيِّرات في كائنٍ واحدٍ. وما الحل؟ ...

تغليف الحقول (Encapsulate Field)

المشكلة لديك حقل عام. الحل جعل الحقل خاصًّا وإنشاء توابع وصول له. مثال قبل إعادة التصميم وجود الحقل العام name في الصنف Person: في لغة Java: class Person { public String name; } في لغة C#‎: class Person { public string name; } في لغة PHP: public $name; في لغة TypeScript: class Person { name: string; } بعد إعادة التصميم جعل الحقل name خاصًّا وإنشاء تابع جلب getName وضبط setName له: في لغة Java: class Person { private String name; public ...

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