proxybuy-flutter/ARCHITECTURE.md

3.9 KiB
Raw Permalink Blame History

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

اضافه کردن فیچر جدید:

  1. پوشه جدید در features/
  2. پیاده‌سازی لایه‌های domain, data, presentation
  3. اضافه کردن به injection_container.dart

🎯 مزایای این معماری:

  1. مقیاس‌پذیری: آسان برای اضافه کردن فیچرهای جدید
  2. تست‌پذیری: جداسازی لایه‌ها
  3. نگهداری: کد منظم و قابل فهم
  4. انعطاف‌پذیری: تغییر آسان منابع داده
  5. استقلال: لایه‌ها مستقل از یکدیگر

🔗 وابستگی‌ها

فعلاً تنها از پکیج‌های اصلی Flutter استفاده شده و نیاز به پکیج خارجی نیست.