أخطاء الـ Abstraction الزيادة وحلول كتابة كود بسيط

x32x01
  • بواسطة x32x01 ||
ليه مش لازم تعمل Abstraction من غير سبب؟ 🤔🔥
يا صاحبي قبل ما تقعد تقول "هعمل interface" أو "خلّيني أزوّد factory"، اسأل نفسك سؤال بسيط جدًا…
"هو أنا فعلاً محتاج الكلام ده دلوقتي؟"

الحتة دي من أكتر الأخطاء اللي بشوف مطورين كتير بيقعوا فيها، سواء في البرمجة أو الـ software architecture. بنقعد نعمل abstraction وطبقات وlayers من غير ما يكون فيه سبب قوي… وبصراحة؟ ده بيضيع وقت وبيكبّر الكود على الفاضي.

ومع بداية السلسلة دي هنتكلم عن أهم Red Flags في الكود. وأول Red Flag معانا هو:

🚩 Future-Proofing Fallacy - وهم الاستعداد للمستقبل​

الفكرة البايخة اللي بتقول:
"خلّيني أعمل abstraction علشان الكود يبقى scalable بعدين"

بس الحقيقة؟
اللي بيحصل غالبًا إن سطرين كانوا ممكن يعملوا الشغل… بيتحولوا لـ 200 سطر، والفايل الصغير يبقى مكتبة هندسية كاملة، وفهم الكود بقى محتاج دكتوراه 😂.



ليه الـ Abstraction الزايد مشكلة؟ 😞💢

خلّيني أكلمك بصراحة وباللهجة اللي بنفهم بيها كلنا… مش كل حاجة محتاجة إنك تعمّمها أو تعمل لها interface.

لما تعمل abstraction قبل أوانه بتقع في مشاكل كتير، منها:

1. زيادة عدد الملفات من غير لازمة 📂😑

بدل ما كان عندك فايل واحد، تلاقي نفسك عامل:
  • interface
  • class
  • factory
  • service layer
  • wrapper
    … وكل ده علشان وظيفة واحدة بس!

2. الكود يبقى أصعب بكتير في الفهم 🧩😵

كل ما تعمل طبقات زيادة، كل ما هتزود الـ indirection اللي هو باختصار إن الوصول للمنطق الحقيقي للكود يتطلب إنك تلف على 3 أو 4 ملفات قبل ما تفهم بيعمل إيه.

3. وقت التعديل يزيد بشكل مرعب ⏳💀

لما يحصل تغيير حقيقي بعدين… هتلاقي نفسك لازم تعدّل في أماكن كتير.
وده غير إن abstraction غالبًا بيتبني على تخمين… مش احتياج حقيقي.

4. بتخلق مشاكل مش موجودة 😑🎭

تبدأ تحل مشاكل مستقبلية ممكن ما تحصلش أصلاً.
وده يعتبر تضيع وقت ومجهود ممكن تستخدمه في حاجات أهم.



إمتى أعمل Abstraction فعلاً؟ ⬅️ لما يكون له معنى 💡✅

لو واحدة من الحالات دي حصِلت… يبقى ساعتها abstraction مطلوب وفعلاً صحي:

1. عندك 2 implementations أو أكتر شغالين دلوقتي

يعني مثلًا:
  • عندك خدمة بتقرأ من File System
  • وخدمة تانية بتقرأ من Database
    ساعتها آه، يبقى تعمل abstraction.

2. API خارجي بيتغيّر فعلاً 🔄

لو بتتعامل مع API ممكن يتغيّر بكرة…
اعمل abstraction علشان ما تبقاش مربوط بيه بشكل مباشر.

3. محتاج seam للاختبار (Testing seam) 🧪

زي مثلًا لما تعمل abstraction للوقت:
C#:
class TimeProvider:
    def now(self):
        raise NotImplementedError()

class SystemTimeProvider(TimeProvider):
    def now(self):
        from datetime import datetime
        return datetime.now()
ده بيخليك تعمل Mock بسهولة في الاختبارات.

4. بتبني نظام Plugins أو extensible system 🔌🧩

زي:
  • Handlers
  • Events
  • Filters
ساعتها abstraction مهم جداً.



مثال برمجي يوضح خطأ الـ Abstraction الزيادة 💻🤓


❌ شكل abstraction الزيادة اللي بنشوفه للأسف:​

C#:
class IMessageSender {
  send(message) {}
}

class EmailMessageSender extends IMessageSender {
  send(message) {
    console.log("Sending Email:", message);
  }
}

class MessageService {
  constructor(sender) {
    this.sender = sender;
  }

  sendMessage(message) {
    this.sender.send(message);
  }
}

const email = new MessageService(new EmailMessageSender());
email.sendMessage("Hello!");
ده كله… علشان تبعت رسالة واحدة بس؟
يا راجل! 😂



✔️ الشكل الأبسط اللي بيعمل نفس الهدف:​

C#:
function sendEmail(message) {
  console.log("Sending Email:", message);
}

sendEmail("Hello!");
الكود أبسط، أوضح، وأسرع… ومبيعملش abstraction من غير لازمة.



نصيحة مهمة لكل مبرمج 💬🔥

Write boring code.
اكتب كود بسيط. مفيهوش تعقيد زيادة.
ومش لازم تستخدم كل Design Pattern في الدنيا علشان تحس إنك عملت شغل جامد.

الهدف الأساسي من البرمجة إنك:
✔ تحل المشكلة
✔ بأقل تعقيد
✔ وبأوضح طريقة

والـ Abstraction مش هدف…
ده أداة، تستخدمها لما تحتاج بس.



إزاي تحافظ على الكود بسيط؟ 🧠✨

1. اسأل نفسك: هل فيه سبب حقيقي ولا مجرد "يمكن"؟

لو الإجابة "يمكن" → يبقى بلاش.

2. سيب المستقبل للمستقبل

لما ييجي use-case جديد… ساعتها بس تعمل abstraction مضبوط.

3. اعمل refactor بدل ما تعمل layers على الفاضي

4. لو الكود بسيط… سيبه بسيط

بلاش تزوّد complexity علشان "الشياكة".



خلاصة الكلام ⚡❤️

لو أنت لسه بادئ في المشوار أو حتى Senior…
افتكر النصيحة دي:
مش كل abstraction صح…
ومش كل future-proofing مفيد…
ومش كل design pattern لازم تستخدمه.


اكتب كود بسيط، واضح، مفهوم…
ومع الوقت لما المشروع يكبر فعلًا، هتعمل abstraction صح وفي مكانه الصح 🔥
 
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
136
x32x01
x32x01
x32x01
الردود
0
المشاهدات
521
x32x01
x32x01
x32x01
الردود
0
المشاهدات
762
x32x01
x32x01
x32x01
الردود
0
المشاهدات
300
x32x01
x32x01
x32x01
الردود
0
المشاهدات
166
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
2,100
المشاركات
2,305
أعضاء أكتب كود
515
أخر عضو
abdo_99
عودة
أعلى