و المبدأ دا هوه ال Abstraction

قبل م تبدأ لازم تقرأ الجزء الي فات من هنا
بالعربي كده، Abstraction يعني إنك تركز على اللي الكود بيعمله مش إزاي بيعمله.
يعني لما تكتب فانكشن أو ميثود، بتخبي التفاصيل اللي ملهاش لازمة للمستخدم، وتخليه يتعامل مع الحاجة بطريقة بسيطة من غير ما يعرف اللي بيحصل في الخلفية.
لو إنت كنت شغال PHP Native، وكنت بتجيب يوزر من قاعدة البيانات، كنت بتكتب
وبتعمل execute للجملة دي
لكن لو بتستخدم Laravel، فالموضوع أسهل
نيجي بقى للمثال اللي في الكتاب
اللي حصل هنا إن الكود ما استخدمش قاعدة البيانات مباشرة (زي PDO)، لكن استخدم interface (واجهة) اسمها Connection.
فـ ممكن تروح تستخدم نسخة تانية من الـ Connection، اسمها مثلاً
استأذنك تقرأ براحة الكلام الي جاي و تفهم بيتم ازاي
في الكود الأصلي، الكلاسUserRegistrationمحتاج حاجة تنفذله الـinsert()، ومش فارق معاه إزاي الـ insert بيتم، هو بس بينادي الميثود وخلاص. بمعني
يعني مش مهم إذا كانت بتتعامل مع ( MySQL او PostgreSQL او MongoDB أو حتى بتخزن جوه Array في الرام! )
فـ بدل ما تديهله object فعلي بيشتغل على MySQL أو PostgreSQL أو أي DB حقيقية، إنت تقدر تديله نسخة مزيفة (Dummy) تشتغل جوه الرام بس، من غير داتا بيز!
يعني لماregisterUser()يناديinsert()،الميثود فعلاً هتشتغل،بس مش هتفتح Connection حقيقية،ولا هتتعامل مع أي داتابيز
هي بس هتخزن البيانات في Array.
يعني الـ registerUser() اشتغل تمام، وخزّن البيانات، من غير ما تفتح connection حقيقية لقاعدة بيانات!لسه تايه صح و الله عارف بس هوضحلك المرة الجاية لأن الكلام دا هيودينا ل فايدة ال
Dependency Injection
Repository Design Pattern
و ازاي بنستخدمهم و معاهم ال IOC ف مفاهيم كتير هتبان واحدة واحدة ان شاء الله
🙂و الوقتي تقدر تشوف التوضيح من هنا بس كمل دا الاول كمل دا الاول للازم تكمل دا الاول
ف بس خليك معايا المهم تطلع فاهم ال Abstraction كويس و تعالي نشوف السؤال دا
هل كود registerUser() ده يعتبر Core Code؟ 🤔
الإجابة: لأ!
ليه؟
علشان Connection نفسها معمولة مخصوص علشان تتعامل مع الداتابيز.
فـ حتى لو registerUser() ما اتعاملش مع PDO بشكل مباشر، هو لسه بيعتمد على abstraction معمولة مخصوص علشان الـ DB.
يعني من الآخر:
الكود لسه مربوط بـ Infrastructure logic حتى لو هو مش شايفها بعينه!
"ما إنت قلتلي قبل كده إن ماليش دعوة الداتا بتتخزن فين، المهم الكود يـ Run؟"
وأنا فعلاً قلت كده، بس كنت ماشي معاك بتسلسل الكتاب خطوة خطوة علشان المفاهيم ما تتلخبطش منك.
ودي نقطة مهمة جدًا، وبتوضح فرق كبير بين:
إن الكود يكون Decoupled ظاهريًا بس لسه مربوط بالمفاهيم التحتية (زي الـ DB)وبين إنه يكون فعلاً Core مستقل عن أي Implementation خارجية حتي لو اتصال غير مباشر ب الداتا بيزمتنساش ترح تشوف التوضيح من هنا
او يلا نروح للقاعدة 2 من هنا