3.9 KiB
3.9 KiB
LBA App - Clean Architecture
📁 معماری پروژه
این پروژه بر اساس Clean Architecture و BLoC Pattern پیادهسازی شده است.
lib/
├── core/ # کتابخانههای مشترک
│ ├── error/
│ │ └── failures.dart # تعریف خطاها
│ └── usecases/
│ └── usecase.dart # Base class برای Use Cases
├── features/ # فیچرهای اپلیکیشن
│ └── auth/ # فیچر احراز هویت
│ ├── data/ # Data Layer
│ │ ├── datasources/
│ │ │ └── auth_remote_data_source.dart
│ │ ├── models/
│ │ │ └── otp_response_model.dart
│ │ └── repositories/
│ │ └── auth_repository_impl.dart
│ ├── domain/ # Domain Layer (Business Logic)
│ │ ├── entities/
│ │ │ └── otp_response.dart
│ │ ├── repositories/
│ │ │ └── auth_repository.dart
│ │ └── usecases/
│ │ ├── send_otp.dart
│ │ └── verify_otp.dart
│ └── presentation/ # Presentation Layer (UI)
│ ├── bloc/
│ │ ├── auth_bloc.dart
│ │ ├── auth_event.dart
│ │ └── auth_state.dart
│ ├── pages/
│ │ ├── onboarding_page.dart
│ │ ├── login_page.dart
│ │ └── otp_verification_page.dart
│ └── widgets/ # ویجتهای مخصوص این فیچر
├── injection_container.dart # Dependency Injection
└── main.dart # Entry Point
🏗️ لایههای معماری
1. Domain Layer (Business Logic)
- Entities: اشیاء اصلی کسبوکار
- Use Cases: منطق کسبوکار
- Repository Interfaces: تعریف قراردادها
2. Data Layer
- Models: تبدیل دادهها
- Data Sources: منابع داده (API, Local DB)
- Repository Implementation: پیادهسازی Repository ها
3. Presentation Layer (UI)
- BLoC: مدیریت State
- Pages: صفحات اپلیکیشن
- Widgets: کامپوننتهای UI
🔧 Dependency Injection
از یک Service Locator ساده استفاده شده:
// در main.dart
sl.init();
// استفاده در UI
BlocProvider(
create: (context) => sl.authBloc,
child: MyApp(),
)
🚀 وضعیت فعلی
✅ پیادهسازی شده:
- معماری Clean Architecture
- BLoC Pattern
- Mock Data برای تست
- Auth Feature (SendOTP, VerifyOTP)
🔄 آماده برای:
- اضافه کردن API واقعی
- اضافه کردن فیچرهای جدید
- تستنویسی
- بهبود UI/UX
📱 استفاده
اجرای اپ:
flutter run
اضافه کردن فیچر جدید:
- پوشه جدید در
features/ - پیادهسازی لایههای
domain,data,presentation - اضافه کردن به
injection_container.dart
🎯 مزایای این معماری:
- مقیاسپذیری: آسان برای اضافه کردن فیچرهای جدید
- تستپذیری: جداسازی لایهها
- نگهداری: کد منظم و قابل فهم
- انعطافپذیری: تغییر آسان منابع داده
- استقلال: لایهها مستقل از یکدیگر
🔗 وابستگیها
فعلاً تنها از پکیجهای اصلی Flutter استفاده شده و نیاز به پکیج خارجی نیست.