شرح المفهوم
المعمارية تبدو كلمة كبيرة، لكن في سكربتات بايثون الصغيرة تعني شيئًا بسيطًا: ضع كل مسؤولية في مكانها الصحيح. يجب تشكيل البيانات في مكان واحد، ويجب أن يتم التنسيق في مكان آخر، ويجب أن تبقى الطباعة بالقرب من حافة البرنامج. في هذا الدرس، ستبني منسق ملفات تعريف صغيرًا. النقطة الحقيقية ليست ملفات التعريف نفسها. النقطة هي تعلم كيفية فصل البيانات عن العرض بحيث يظل سكربتك قابلًا للقراءة عندما يكبر. الكثير من أكواد المبتدئين تصبح فوضوية لأن كل شيء يحدث في `main()`. هذا يعمل لخمسة أسطر، ثم سرعان ما يتحول إلى كومة من المنطق المختلط. هنا، ستتدرب على تخطيط أنظف: دالة واحدة تجهز البيانات، ودالة واحدة تنسقها، و`main()` يربط الأجزاء فقط. بحلول نهاية هذا الدرس، يجب أن تكون قادرًا على: • شرح سبب انتماء الطباعة إلى حافة البرنامج، • فصل قرارات بنية البيانات عن تنسيق المخرجات، • وصف كيف يمكن لهذا السكربت لاحقًا استبدال البيانات الوهمية بصفوف قاعدة بيانات أو نتائج API. لماذا هذا مهم: المعمارية الجيدة ليست لجعل الكود يبدو متقدمًا. إنها لجعل الكود أسهل في التغيير دون كسر أجزاء غير ذات صلة.
أين تضع الكود
- عرّف متغيرات اللون والموضع في الأعلى.
- أنشئ منطق رسم الأشكال أو وضعها في المنتصف.
- اعرض المخرجات (طباعة، لوحة، SVG، أو كتلة منسقة) في النهاية.
مرجع الأوامر
- اجعل `main()` صغيرًا؛ يجب أن يربط الأجزاء، لا أن يخفي كل منطق العمل.
- استخدم دالة واحدة لتحميل البيانات ودالة أخرى لتنسيق البيانات بحيث يظل كل جزء سهل التغيير.
- أعد سلاسل نصية من دوال العرض بدلًا من الطباعة داخلها كلما أمكن ذلك.
- اختر أسماء تصف دور كل دالة، وليس فقط نوع القيمة التي تعيدها.
دليل خطوة بخطوة
- شغّل السكربت مرة واحدة ولاحظ أن `load_learners()` تجهز البيانات بينما `render_profile_card()` تتحكم في العرض.
- أضف متعلمًا آخر إلى القائمة وتأكد من عدم الحاجة إلى تغيير أي دالة أخرى.
- غيّر سلسلة التنسيق فقط في `render_profile_card()` وتحقق من بقاء محمل البيانات دون مساس.
- أضف حقلًا جديدًا مثل `level` أو `country` إلى `TypedDict` وحدث المنسق بعناية.
- اكتب ملاحظة قصيرة تشرح لماذا الطباعة داخل `main()` أنظف من الطباعة داخل دالة تحميل البيانات.
تمارين تطبيقية
- أعد كتابة المثال باستخدام `dataclass` بدلًا من `TypedDict` وقرر أي نسخة تبدو أوضح لك.
- اشرح لماذا تخزين السلاسل المنسقة مسبقًا داخل البيانات الخام سيجعل التغييرات المستقبلية أصعب.
- تخيل أن البيانات تأتي لاحقًا من `SQLite` أو `API`. أي دالة يجب أن تتغير أولًا، وأيها يجب أن تبقى كما هي؟
تحديات برمجية
- أضف منسقًا ثانيًا يطبع سطرًا ملخصًا أقصر، مع إعادة استخدام نفس مصدر البيانات.
- أنشئ خطوة تصفية صغيرة تطبع فقط المتعلمين الذين تزيد درجاتهم عن 900 دون خلط منطق التصفية في المنسق.
مهام تمرين صغيرة
- ارسم ثلاثة مربعات في ملاحظاتك: البيانات، التنسيق، المخرجات.
- قل التدفق بصوت عالٍ مرة واحدة: حمّل البيانات، نسّق عنصرًا واحدًا، اطبع النتيجة.
- احتفظ بقاعدة واحدة من هذا الدرس: المحمّلات تحمّل، المنسّقات تنسّق، `main` يربط.
خطأ شائع
Mixing x and y axes or using wrong coordinate origin causes shapes to appear in unexpected places.
تحدٍ مصغّر من الواقع
Draw one square, one triangle, and one circle, then move X marker 2 steps right and 1 step down.