الفرق بين المراجعتين لصفحة: «Refactoring/data class»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:أصناف البيانات (Data Classes)}}</noinclude> == توصيف المشكلة == وجود العديد من أصناف البيانات...' |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
سطر 27: | سطر 27: | ||
== مصادر == | == مصادر == | ||
* [https://refactoring.guru/smells/data-class صفحة توثيق أصناف البيانات في موقع refactoring.guru.] | * [https://refactoring.guru/smells/data-class صفحة توثيق أصناف البيانات في موقع refactoring.guru.] | ||
[[تصنيف:Refactoring]] | |||
[[تصنيف:Refactoring Smells]] | |||
[[تصنيف:Refactoring Dispensables]] |
المراجعة الحالية بتاريخ 14:58، 26 فبراير 2019
توصيف المشكلة
وجود العديد من أصناف البيانات في الشيفرة، والتي تُستخدَم لتخزين البيانات التي تحتاج إليها الأصناف الأخرى، إذ تحتوي على حقولٍ للبيانات (fields) وتوابع للوصول إليها (accessors) أي توابعَ للحصول على بيانات الحقول (getter) وأخرى لتعديلها (setter)، ولا تقوم هذه الأصناف بأيّ مهمّة أخرى ولا تستطيع كذلك تنفيذ العمليات (operations) على بياناتها بمفردها.
أسبابها
من الطبيعي أن يحتوي الصنف -بادئ الأمر- على القليل من الحقول العامّة (public fields) وبعض التوابع للوصول إليها (accessors) ولكن إن استمرَّ الصنف كذلك فلن تتمتَّعَ الكائنات (objects) المُشتقَّة عنه بقوة التحكُّم ببياناتها وإجراء العمليَّات عليها.
وما الحل؟
- تغليف الحقول العامّة (encapsulate public fields) للصنف لحمايتها من الوصول المباشر إليها من الأصناف الأخرى، وسيصبح الوصول إليها عبر توابع الوصول (accessors) المُخصَّصة لها فقط.
- تغليف المجموعات (encapsulate collections) إن كانت البيانات مُخزَّنةً في مجموعاتٍ (مصفوفةٍ [array] مثلًا).
- مراجعة شيفرة العميل (client code) التي تستخدِم الصنف، فقد تجدُ مهامًا من الأنسب وضعُها في صنف البيانات نفسه وذلك بالاعتماد على نقل التوابع (move methods) واستخراج التوابع (extract methods).
- سيصبح الصنف بعد إجراء الخطوات السابقة مليئًا بالتوابع اللازمة فقط، ويجب عندئذٍ التخلُّص من توابع الوصول القديمة من خلال إزالة توابع التعديل (remove setting methods) وإخفاء التوابع (hide methods).
إليك المزيد
سيساعد حلُّ المشكلة في:
- تسهيل فهم الشيفرة وتحسين تنظيمها، فقد أصبحت العمليات المتعلِّقة بتلك الحقول مُجمَّعةً في مكانٍ واحدٍ بدلًا من وجودها بأجزاء متفرِّقة.
- الكشف عن مواضع التكرار (duplicates) في شيفرة العميل (client code).
انظر أيضًا
- تغليف الحقول العامّة (encapsulate public fields)
- تغليف المجموعات (encapsulate collections)
- نقل التوابع (move methods)
- استخراج التوابع (extract methods)
- إزالة توابع التعديل (remove setting methods)
- إخفاء التوابع (hide methods)