Add auto-release and update system
This commit is contained in:
1 parent
502cdacb44
commit
0557679e9c
125 files changed
+6799
-1680
No files matched your search
@@ -0,0 +1,68 @@
|
||||
# گزارش تحلیل و پیشنهادات بهبود پروژه MonthlyPaymentApp
|
||||
|
||||
این گزارش شامل بررسی فنی ساختار پروژه و ارائه راهکارهای عملی برای بهبود کیفیت کد، نگهداری آسانتر و رعایت استانداردهای توسعه اندروید است.
|
||||
|
||||
## ۱. معماری و مدیریت وابستگیها (DI)
|
||||
|
||||
### وضعیت فعلی
|
||||
پروژه از DI دستی در کلاس `PaymentApplication` استفاده میکند. با رشد پروژه، مدیریت کارخانههای ViewModel (Factories) دشوار و مستعد خطا خواهد بود.
|
||||
|
||||
### پیشنهاد
|
||||
استفاده از **Hilt (Dagger)** برای مدیریت وابستگیها.
|
||||
- **مزیت:** حذف کدهای تکراری در `Application` و `Activity` و سادهسازی فرآیند تست واحد.
|
||||
- **اقدام:** افزودن کتابخانههای Hilt به `build.gradle.kts` و استفاده از آنوتیشنهای `@HiltAndroidApp` و `@HiltViewModel`.
|
||||
|
||||
---
|
||||
|
||||
## ۲. بازنگری در ViewModels (اصل Single Responsibility)
|
||||
|
||||
### وضعیت فعلی
|
||||
فایل [PersonViewModel.kt](file:///E:/AndroidStudioProjects/MonthlyPaymentApp/app/src/main/java/com/oqba26/monthlypaymentapp/viewmodel/PersonViewModel.kt) با حدود ۱۰۰۰ خط کد، تبدیل به یک **God Object** شده است. این کلاس همزمان وظایف زیر را انجام میدهد:
|
||||
- مدیریت احراز هویت (Auth)
|
||||
- مدیریت لیست افراد و پرداختها
|
||||
- ارسال پیامکهای گروهی و تکی
|
||||
- خروجی اکسل (Excel Export)
|
||||
- جستجو در مخاطبین گوشی
|
||||
|
||||
### پیشنهاد
|
||||
تقسیم `PersonViewModel` به کلاسهای تخصصیتر:
|
||||
- `AuthViewModel`: برای لاگین و ثبتنام.
|
||||
- `PersonListViewModel`: برای نمایش و فیلتر لیست افراد.
|
||||
- `SmsService` یا `SmsHelper`: برای منطق ارسال پیامک.
|
||||
- `ExportManager`: برای تولید فایلهای گزارش.
|
||||
|
||||
---
|
||||
|
||||
## ۳. جداسازی Context از لایه منطق
|
||||
|
||||
### وضعیت فعلی
|
||||
در متدهایی مانند `processNextBulkSms(Context)` یا `exportYearlyReport(..., Context)` در ViewModel، از `Context` استفاده شده است.
|
||||
- **مشکل:** این کار باعث نشت حافظه (Memory Leak) احتمالی میشود و تستنویسی (Unit Testing) را غیرممکن میکند.
|
||||
|
||||
### پیشنهاد
|
||||
ViewModel نباید هیچ دانشی از `Context` داشته باشد.
|
||||
- **راهکار:** برای مواردی مثل نمایش Toast یا شروع Intent، از یک `SharedFlow` برای ارسال **UI Events** به Activity استفاده کنید.
|
||||
|
||||
---
|
||||
|
||||
## ۴. بهبود لایه UI و Compose
|
||||
|
||||
### وضعیت فعلی
|
||||
فایلهایی مثل `PersonScreen.kt` و `MainActivity.kt` بسیار طولانی هستند. کامپوننتهای UI و منطق ناوبری در هم تنیده شدهاند.
|
||||
|
||||
### پیشنهاد
|
||||
- **شکستن کامپوننتها:** بخشهای مختلف صفحه (مانند SearchBar، PersonItem، Dialogs) را به فایلهای جداگانه در پکیج `ui.components` منتقل کنید.
|
||||
- **String Resources:** تمام رشتههای فارسی هاردکد شده (مانند "آیا از حذف قطعی... مطمئن هستید؟") را به فایل `res/values/strings.xml` منتقل کنید.
|
||||
|
||||
---
|
||||
|
||||
## ۵. پیشنهادات فنی تکمیلی
|
||||
|
||||
- **نوسازی پکیجها:** پکیجهای `util` و `utils` را ادغام کنید تا ساختار پروژه تمیزتر شود.
|
||||
- **Supabase Realtime:** با توجه به استفاده از Supabase، مطمئن شوید که از قابلیت Realtime برای همگامسازی آنی دادهها بین دستگاههای مختلف استفاده میکنید.
|
||||
- **Room Migrations:** برای دیتابیس محلی، استراتژی مهاجرت (Migration) را مشخص کنید تا در آپدیتهای بعدی، دادههای کاربر پاک نشود.
|
||||
|
||||
---
|
||||
|
||||
> [!TIP]
|
||||
> اگر مایل باشید، میتوانیم با **راهاندازی Hilt** یا **انتقال متون به strings.xml** شروع کنیم که تغییراتی کمریسک اما بسیار موثر در تمیزی پروژه هستند.
|
||||
Reference in new issue
Block a user