اريد ان افهم ماهو code smells
ماهو code smells
هي إشارات داخل الكود توضح لك بأن ثمة خلل في التصميم. يمكنك الاطلاع على تفاصيل أكثر من خلال الرابط أدناه.
على عكس ما يُعتقد، ال code smells ليس أخطاءا أو مشاكل في حد ذاتها بل هي اشبه بالانتهاكات في طريقة كتابة شيفرة نظيفة قابلة للتوسع مما يخل بقواعد الشيفرة النظيفة clean code وقواعد تطوير البرمجيات. بالشكل العام،
هي مجموعة من التطبيقات او الممارسات التي يقترح التخلي عنها، ويتم عادة تنظيم عملية تقسيمها الى ثلاث اصناف رئيسية:
- Application-level smells او اخلالات على مستوى التطبيق: مثل: اعطاء اسماء غامضة للدوال، الأصناف ، التوابع والمتغيرات. تكرار الشيفرات
- Class-level smells او اخلالات على مستوى الاصناف، مثل: اطالة الاصناف او تكرار استعمال توابع صنف آخر ضمن صنف ما
- Method-level smells او اخلالات على مستوى الوظائف، مثل: قبول التوابع والدوال لأكثر من معامل
هاته الطرق والممارسات لا توقف تنفيذ الشيفرة ولكنها تعتبر طرقا سيئة تجعل من البرمجية هشة غير احترافية وغير قابلة للتطوير، الفحص او التوسع. (أتذكر التخلي تماما عن الشيفرة البرمجية لمؤسسة تعليمية سعودية لمجرد عدم امكانية اضافة ميزات والعمل عليها بسبب جودة الشيفرة آنذاك.)
لتجنب هاته الممارسات الغير احترافية ينبغي تعلم مبادئ الشيفرات النظيفة من مثل مجموعة مبادئ SOLID او DRY وغيرها، بجانب الالمام بأنماط التصميم وطرق فحص الشيفرات وأفضل الممارسات لتطوير البرمجيات.
بالنسبة لمصطلح code smells هو يُعبر عن بعض المشاكل التي عندما تجدها في الشفرة يُعد ذلك إشارة عن سوء التصميم , بعض علامات الcode smells
- data clumbs : عندما يكون لدينا مجموعة من المتغيرات يتم تمريرها عادةً سويًا , على سبيل المثال
public int doSomeThingWithPoint(int x, int y, int z)
- تلك الدالة تقوم بإستقبال الإخداثيات الثلاثة الخاصة بنقطة ما ومن ثم تقوم بعملية ما على تلك النقطة, هذا يُعد إشارة لتصميم سيئ, يمكننا تعديل التصميم ونضع المتغيرات الثلاثة في صنف يُعبر عن النقطة كما يتضح
public class Point{ public setX(){ //set x} public setY(){ //set y} public setZ(){ //set y} ///getters }
- data classes : في المثال السابق عالجنا مشكلة الdata clumps ولكن تسببنا في ظهور مشكلة جديدة وهي data classes أي أصناف لا يوجد بها إلا getters , setters لا يوجد بها دوال فعلية, يمكننا معالجة تلك المشكلة عبر نقل دالة doSomeThing إلى الصنف point
public class Point{ public setX(){ //set x} public setY(){ //set y} public setZ(){ //set y} ///getters public doSomeThing(){ //do something with point } }
- shotgun surgery: عندما تقوم بعمل تعديل على دالة ما وتتسبب في جعلك تحتاج تعديل على دوال واماكن اخرى كثيرة غيرها, هذا علامة على التصميم السيئ حيث من علامات التصميم الجيد أن التغيير في أحد الدوال أو الأصناف لا يؤثر على باقي البرنامج:
ومن المفيد حتى نتجنب الcode smells أن نحاول إتباع مبادئ SOLID قدر الإمكان , ويمكنك قراءة المزيد عن مبادئ SOLID عبر الرابط التالي
https://academy.hsoub.com/t...
التعليقات