6.1 · حالات عملية

المستوى 6 · في الممارسة

6.1حالات عملية

الهدف: رؤية كيف تتسلسل مهارات المستويات 0 إلى 5 على حالات حقيقية.
الوقت المقدّر: 14 دقيقة · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • التثبيت : تتبع النفقات يتسلسل دوال ← dataclass ‏+ JSON ← ‏venv ‏+ pytest ← ‏FastAPI ← ‏Docker ‏+ CI حتى النشر.
  • الأتمتة : التقرير الأسبوعي CSV يضيف pandas، ورسم Matplotlib، وجدولة cron مع سجلات وإرسال بالبريد على هذه الأسس.
  • التسليم : ‏venv معاد بناؤه، ومتطلبات مثبتة، واختبارات خضراء وسجلات متحقق منها في الشهر الأول.

خيط نبيل — بعد سنة : ورشتان تعملان في الجزائر

نبيل، محلل بيانات مبتدئ في الجزائر، يراجع ورشتيه الأبرز في السنة : تتبع النفقات المولود دفتر وحدة تحكم الذي صار واجهة منشورة، ثم التقرير الأسبوعي لمبيعات CSV المؤتمت بالكامل. الحالتان أدناه تستعيدان تسلسله : قسّم، ونمّط، واختبر، واعزل، وسلّم.

كل حالة تتبع السياق ← الخطوات ← النتيجة : أعد تنفيذها على مشاريعك.

تركيب اللبنات معاً

وضعت المستويات السابقة اللبنات (الأسس، والبنى، والبرمجة كائنية التوجه (POO)، والأخطاء، والوحدات، وvenv، والاختبارات، والويب، والبيانات، والنشر (Deployment)) ؛ هنا نركبها في ظروف حقيقية : ننطلق من حاجة ملموسة، ونقسّم، وننمّط، ونختبر، ونعزل ونسلّم. حالتان مفصلتان من الألف إلى الياء.

الحالة 1 — تتبع النفقات : من الدفتر إلى الواجهة المنشورة

السياق: المشروع الخيط الأحمر : تتبع نفقات مولود دفتر وحدة تحكم (N1)، صار دائماً (N2)، ومختبراً (N3)، ومعروضاً كواجهة (N4) ومنشوراً (N5).

Déroulé :

  1. N1 : دوال إضافة/سرد/مجموع، وقائمة main()، و80 سطراً مقسمة.
  2. N2 : ‏dataclass نفقة، وJSON عبر pathlib، وtry/except على الإدخال.
  3. N3 : وحدات + ‏venv ‏+ متطلبات، وتلميحات الأنواع (type hints)، واختبارات pytest للمجموع.
  4. N4 : ‏FastAPI ‏(GET/POST) لعرض النفقات.
  5. N5 : ‏Dockerfile نحيف، وCI ‏ruff ‏+ pytest، والنشر عند كل دفع.

النتيجة: رابط يسرد نفقاتك، مختبر في CI، ومعاد نشره عند كل دفع.

الحالة 2 — تقرير أسبوعي مؤتمت من CSV

السياق: كل يوم اثنين، يجب أن يصير استخراج CSV للمبيعات ملخصاً مرقماً مرسلاً بالبريد.

Déroulé :

  1. ‏pandas : قراءة، وفحص (isna)، وتجميع groupby حسب المدينة، وأعلى 5.
  2. ‏Matplotlib : شريط واحد بعنوان-رسالة، وتصدير PNG.
  3. سكربت مجدول (cron) مع تسجيل (logging) و‏try مستهدفة، ومختبر على نسخ.
  4. بريد بالملخص + ‏PNG مرفقاً، وسجلات متحقق منها في الشهر الأول.

النتيجة: صفر اثنين يدوي : التقرير يصل وحده، مع سجلاته.

خطأ شائع في الفهم: « نسخ الحالات حرفياً ». خطأ. الحالات تُظهر ترتيب تركيب (قسّم، ونمّط، واختبر، واعزل، وسلّم)، لا وصفة للنسخ : استعد الترتيب، وكيّف البيانات وإطار العمل والاستضافة مع مشروعك.
نص المخطط (SEO / قارئات الشاشة / الترجمة): السلسلة الكاملة : 1) التقسيم (دوال قصيرة، وmain، ووحدات). 2) التخزين الدائم (dataclass، وpathlib، وJSON، وtry مستهدفة). 3) العزل والإثبات (venv، ومتطلبات مثبتة، وتلميحات، وpytest). ‏4) العرض (FastAPI ‏GET/POST). ‏5) الأتمتة (groupby في pandas، وMatplotlib، وcron، وتسجيل). 6) التسليم (Dockerfile نحيف، وCI ‏ruff ‏+ pytest، والنشر، وسجلات متحقق منها). الدرس : تسلسل قسّم ← نمّط ← اختبر ← اعزل ← سلّم هو ما يميز تطبيقاً يعمل عن سكربت لا نجرؤ على لمسه.

نص جاهز للقول — تأطير مشروع Python قبل الترميز (30 ثانية)

« حاجتنا : [تتبع نفقات معروض كواجهة]. أسسنا : [دوال مقسمة + تلميحات + ‏pytest ‏+ venv]. نخزن دائماً بـ JSON، ونعرض بـ FastAPI، ونسلّم عبر Docker ‏+ CI. »

نموذج نسخ ولصق — واجهة تتبع دنيا (FastAPI)

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()
depenses: list[dict] = []


class Depense(BaseModel):
    motif: str
    montant: float


@app.get("/depenses")
def lister() -> list[dict]:
    return depenses


@app.post("/depenses", status_code=201)
def ajouter(depense: Depense) -> dict:
    item = depense.model_dump()
    depenses.append(item)
    return item

شركة صغيرة جداً / ميزانية صغيرة

حالة واحدة معادة التنفيذ على حاجة بسيطة : تتبع بمورد واحد، وتقرير CSV أدنى، ونشر مباشر.

شركة صغيرة ومتوسطة في الجزائر

تكييف النشر مع الواقع المحلي : حواسيب مشتركة، وذروات الاثنين، ونسخ احتياطية ومرجع معين.

عن بعد / هجين

مضاعفة التتبع عن بعد : متطلبات مثبتة موثقة، وخط أنابيب CI ووصول مكتوب.

بين الثقافات

التحقق من الاستعمالات المحلية قبل نقل حالة : يجب أن تخاطب التسميات والمدن وقواعد التجميع الفريق.

حذر: تذكير عام : الأسرار (مفاتيح البريد، ورموز السحابة) وبيانات المستخدمين تُحمّلك المسؤولية — ضعها في متغيرات بيئة (Environment variables) لا تُنسخ أبداً، وأعد توليد كل مفتاح مكشوف واعرض على المرجع المعين ؛ هذا الدليل لا يقدم رأياً قانونياً.

تحدي 48 ساعة — طبّق غداً

خذ مشروعاً حقيقياً واحداً واكتب سلسلته في 5 أوقات (قسّم ← نمّط ← اختبر ← اعزل ← سلّم). حدد الخطوة التالية.

قائمة الخروج من القسم
  • أعرف تركيب اللبنات في تطبيق كامل، من الدفتر إلى الواجهة المنشورة.
  • عندي نموذج FastAPI قابل لإعادة التنفيذ لمشروعي.
  • أنجزت تحدي 48 ساعة أو برمجت تاريخه.
تقييم ذاتي 1-5 : تسلسل الخطوات ؟الأتمتة والتسليم مغطيان ؟
تحقّق من فهمك

نبيل يكبّر تتبع نفقاته حتى الواجهة المنشورة. أي تسلسل يحترم الدليل ؟