🔥 كيف تبني 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.dartJavaScript🧠 أولاً: فلسفة هذا التنظيم
بدل ما ترتب حسب:
❌ (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 كامل