“ما را در اینستاگرام دنبال کنید”
در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم در مورد معماری Clean در MVI، صحبت کنیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
مهمترین مبحث در MVI (Model-View-Intent) مربوط به معماری Clean میتواند شامل سه بخش اصلی باشد: Model، View، و Intent. در زیر، هرکدام از این بخشها را به صورت خلاصه بررسی میکنیم.
در Model، کدها و کلاسها قرار دارند که مسئولیت دادهها، منطق کسب و کار، و تغییرات برنامه را دارند. این بخش باید بیوابسته باشد و از هر گونه وابستگی به بخشهای دیگر بپرهیزد. از اصول SOLID (تشکیل شده از پنج اصل اولیه برنامهنویسی شیءگرا) میتوان برای پیادهسازی مدلهای Clean استفاده کرد.
View باید تنها مسئول نمایش دادهها و دریافت ورودی از کاربر باشد. این بخش باید حداقل منطق را داشته باشد و از لحاظ منطق کسب و کار به صورت کامل به Presenter یا ViewModel وابسته باشد. این امکان را فراهم میکند تا تغییرات در منطق کسب و کار به سرعت اعمال شوند.
Intent به عنوان واسط بین View و Model عمل میکند. این شامل درخواستها و وقایعی است که از طریق View به Model ارسال میشود. Intent باید ساده و بیوابسته به لایههای دیگر باشد. این میتواند به وسیله یک الگوی Observer برای گوش دادن به تغییرات Model استفاده شود.
Clean Architecture سعی دارد تا کد را به قسمتهای قابل تست، قابل نگهداری و انعطافپذیر تقسیم کند. این معماری در لایههای مختلف مانند Entities، Use Cases، Interface Adapters و Frameworks & Drivers تقسیم میشود. هر لایه به تعدادی اصل مسئولیت دارد و وابستگیها از لایههای بیرونی به لایههای درونی هستند.
برای اجرای این معماری در اندروید، ممکن است از روشهای مختلفی مانند استفاده از ViewModel یا استفاده از روشهای تزریق وابستگی مثل Dagger استفاده کنید.
از طریق جدا سازی لایهها، تست کردن هر قسمت به صورت مستقل و آسانتر میشود.
افزایش قابلیت نگهداری از طریق جدا کردن وظایف به لایههای مختلف.
امکان تغییر در یک لایه بدون تأثیر بر سایر لایهها.
برخی از پروژهها ممکن است از حد کاربردی این معماری بگذرند و باعث پیچیدگی اضافی شوند.
به دلیل تقسیم کد به لایهها، ممکن است تعداد فایلها و کلاسها افزایش یابد.
به طور کلی، استفاده از MVI و Clean Architecture در اندروید میتواند باعث افزایش کیفیت و قابلیت توسعه پروژه شود. البته، باید توجه داشت که هر پروژه ممکن است نیازها و شرایط مختلفی داشته باشد، بنابراین انتخاب معماری باید با توجه به نیازها و اهداف خاص پروژه صورت گیرد.
یک مثال کامل از MVI با استفاده از kotlin ، Coroutines ، Flow و Use Case ارائه خواهم داد. در این مثال از یک برنامه مدیریت لیست کاربران استفاده میشود.
// Model data class User(val id: String, val name: String) // Repository class UserRepository { private val userList = mutableListOf<User>() suspend fun addUser(user: User) { // شبیهسازی عملیات ذخیرهسازی delay(500) userList.add(user) } suspend fun getUserList(): List<User> { // شبیهسازی عملیات دریافت اطلاعات از منبع داده delay(500) return userList.toList() } }
// Use Case class AddUserUseCase(private val userRepository: UserRepository) { suspend fun execute(id: String, name: String) { val newUser = User(id, name) userRepository.addUser(newUser) } }
// Intent interface UserListIntent { fun onAddUserClicked(id: String, name: String) } // View class UserListView(private val intentListener: UserListIntent) { fun showUserList(userList: List<User>) { // نمایش لیست کاربران در ویو } fun getUserInput(): Pair<String, String> { // دریافت اطلاعات از ورودی کاربر برای افزودن کاربر جدید } fun setIntentListener() { // تنظیم گوش دادن به رویدادها // مثلاً: زمانی که دکمه افزودن کاربر جدید فشرده میشود val (id, name) = getUserInput() intentListener.onAddUserClicked(id, name) } }
// Presenter class UserListPresenter( private val view: UserListView, private val addUserUseCase: AddUserUseCase ) : UserListIntent { private val _userListState = MutableStateFlow<List<User>>(emptyList()) val userListState: StateFlow<List<User>> = _userListState init { view.setIntentListener(this) observeUserList() } private fun observeUserList() { viewModelScope.launch { userRepository.getUserListFlow() .collect { userList -> _userListState.emit(userList) } } } override fun onAddUserClicked(id: String, name: String) { viewModelScope.launch { addUserUseCase.execute(id, name) } } }
در این مثال، از MutableStateFlow برای نگهداری وضعیت لیست کاربران استفاده شده است. همچنین از viewModelScope برای اجرای عملیات مربوط به Coroutines در ViewModel استفاده شده است.
توجه داشته باشید که در اینجا از delay(500) برای شبیهسازی زمان انجام عملیات (مانند افزودن کاربر یا دریافت لیست) استفاده شده است. در یک برنامه واقعی، شما باید این جا به جای delay از توابع مستقیم دسترسی به پایگاه دادهها یا شبکه استفاده کنید.
در نهایت، این مثال به شما یک الگوی کلی از چگونگی استفاده از MVI، Coroutines، و Flow در یک برنامه اندروید را نشان داد.
در نتیجه، استفاده از معماری Clean در الگوی Model-View-Intent (MVI) در اندروید به طور گستردهای میتواند به بهبود قابلیت تست، قابل نگهداری، و مقیاسپذیری برنامهها کمک کند. این الگو از اصول Clean Architecture برای جدا کردن لایههای مختلف برنامه و تشویق به استفاده از اصول SOLID در پیادهسازی Model، View، و Intent بهره میبرد. با تلفیق Clean Architecture با ویژگیهای Kotlin، این معماری توانسته است به توسعهدهندگان اندروید یک چارچوب مفید و قدرتمند برای پروژههای متنوع را ارائه دهد. از آنجایی که Clean MVI تلاش میکند تا کد را سازماندهی کرده و از تنشها و وابستگیهای غیرضروری جلوگیری کند، میتواند به بهترین شکل ممکن کیفیت و قابلیت توسعه پروژههای اندرویدی را تضمین کند.
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
دوره آموزشی کاتلین پیشرفته میتواند مهارتهای شما را با بهرهگیری از ابزارها و فناوریهای مدرن…
مزیتهای کاتلین نسبت به سایر زبانهای برنامه نویسی اندروید این است که سایر زبانها، از…
بهینهسازی عملکرد اپلیکیشنهای اندروید یکی از مهمترین فاکتورهایی است که برای کاربران در دنیای امروز…
مصاحبهی استخدامی کاتلین یک فرصت برای ارزیابی مهارتها و تواناییهای یک برنامهنویس در توسعه اپلیکیشنهای…
مصاحبه استخدام زبان کاتلین یک فرصت برای ارزیابی مهارتها و تواناییهای یک برنامهنویس در توسعه…
مصاحبه استخدام کاتلین یک فرصت برای ارزیابی مهارتها و تواناییهای یک برنامهنویس در توسعه اپلیکیشنهای…