Project Structure

🔥 كيف تبني Project Structure فعلي (Folders)

  • lib/
  • features/
  • core/
  • data/
  • presentation/

أو

🔥 نطبق مثال كامل (Login + API) خطوة خطوة

اختر 👇

🔥 كيف تبني Project Structure فعلي (Folders) lib/ features/ core/ data/ presentation/ قم بتحديد البنية المتقدمة من البداية لي لاعرف كيف سيكون الترتيب مع مجموعة ضخمة من الميزات

ممتاز 🔥 الآن سندخل في مستوى احترافي فعلاً:
كيف تبني Project Structure قابل للتوسع لمشروع ضخم في Flutter باستخدام:

  • Clean Architecture
  • Feature-Based Structure
  • Cubit / BLoC

بدون كود — فقط تنظيم ذكي 👇

🏗️ الفكرة العامة (Big Picture)
lib/

├── core/
├── features/
├── config/
├── main.dart
JavaScript

🧠 أولاً: فلسفة هذا التنظيم

بدل ما ترتب حسب:
❌ (models / screens / widgets)

نرتب حسب:
Features (ميزات التطبيق)

📌 مثل:

  • auth (تسجيل الدخول)
  • home
  • profile
  • settings

📂 الشكل الكامل المتقدم

lib/

├── core/
│ ├── error/
│ ├── network/
│ ├── utils/
│ ├── constants/
│ ├── services/
│ └── widgets/

├── config/
│ ├── routes/
│ ├── theme/
│ └── localization/

├── features/
│ ├── auth/
│ ├── home/
│ ├── profile/
│ └── settings/

└── main.dart

🧩 أهم جزء: features/

كل Feature هو تطبيق صغير داخل التطبيق 😎


📂 مثال Feature متكامل (auth)

features/
└── auth/

├── data/
│ ├── models/
│ ├── datasources/
│ └── repositories/

├── domain/
│ ├── entities/
│ ├── repositories/
│ └── usecases/

├── presentation/
│ ├── cubit/ أو bloc/
│ ├── pages/
│ └── widgets/

└── auth_injection.dart

🔍 شرح كل طبقة داخل Feature


🟣 1. presentation/

👉 هذه الطبقة التي يرى المستخدم نتائجها

presentation/
├── cubit/
├── pages/
└── widgets/

🎯 تحتوي:

  • UI
  • Cubit / BLoC
  • حالات (States)

🔵 2. domain/

👉 أهم طبقة (قلب المنطق)

domain/
├── entities/
├── repositories/
└── usecases/

🎯 تحتوي:

🧱 Entities

  • كائنات مجردة (User, Post)

📦 Repositories (abstract)

  • تعريف فقط (interface)

⚙️ UseCases

  • كل عملية منفصلة:
    • login
    • logout
    • getUser

📌 هذا أهم شيء في Clean Architecture


🟢 3. data/

👉 تنفيذ فعلي للبيانات

data/
├── models/
├── datasources/
└── repositories/

📦 Models

  • تحويل JSON ↔ Object

🌐 DataSources

  • API
  • Local DB

🔁 Repository Implementation

  • يربط domain مع data

🧠 core/ (مشترك لكل التطبيق)

core/
├── network/
├── error/
├── utils/
├── constants/
├── services/
└── widgets/

🎯 ماذا يحتوي؟

🌐 network

  • Dio / HTTP setup

❌ error

  • Exceptions
  • Failures

🧰 utils

  • Helpers

🔢 constants

  • Strings / Keys

🧩 widgets

  • Widgets مشتركة

⚙️ config/

config/
├── routes/
├── theme/
└── localization/

🎯 مسؤولة عن:

  • Navigation
  • Theme
  • Languages

🔥 كيف يبدو مشروع ضخم فعلي؟

features/
├── auth/
├── home/
├── profile/
├── notifications/
├── chat/
├── search/
├── settings/
├── payments/
└── admin_panel/

📌 كل واحد منهم:

  • مستقل بالكامل
  • يحتوي نفس structure

🧠 تدفق البيانات داخل هذا النظام

UI (presentation)

Cubit / BLoC

UseCase

Repository (domain)

Repository Impl (data)

DataSource (API/DB)

🧩 لماذا هذا التنظيم قوي جداً؟

✅ 1. قابل للتوسع (Scalable)

تضيف Feature بدون لمس باقي المشروع


✅ 2. سهل للفِرق

كل فريق يعمل على Feature منفصل


✅ 3. اختبار ممتاز

تختبر UseCases بدون UI


✅ 4. مرونة عالية

تغير API بدون كسر النظام


🚀 نصائح احترافية

🔥 1. كل Feature مستقل

لا تربط Features ببعض مباشرة


🔥 2. استخدم Dependency Injection

مثل:

  • get_it

🔥 3. لا تخلط الطبقات

❌ UI يتصل بـ API مباشرة
✅ لازم يمر بكل الطبقات


🏁 خلاصة ذهبية

أفضل Structure لمشروع كبير:

lib/
├── core/
├── config/
├── features/
└── كل Feature = Clean Architecture كامل