Junior
MVVM ნიმუშის შესახებ მითხარი.
sobes.tech AI
პასუხი AI-სგან
მოდელი-ხედი-მოდელი ხედვა (MVVM) — არქიტექტურული ნიმუში, რომელიც გამოყოფს მომხმარებლის ინტერფეისს (View) ბიზნეს-ლოგიკიდან (Model) შუამავლით — ხედი მოდელი (ViewModel).
- Model: წარმოადგენს მონაცემებს და აპლიკაციის ბიზნეს-ლოგიკას. არ შეიცავს UI-სპეციფიკურ ლოგიკას.
- View: აჩვენებს ViewModel-დან მონაცემებს და აგზავნის მომხმარებლის მოქმედებებს (მაგალითად, ღილაკების დაჭერას) ViewModel-თან. არ შეიცავს ბიზნეს-ლოგიკას, მხოლოდ გამოსახულების ლოგიკას.
- ViewModel: მოქმედებს როგორც კავშირი. უზრუნველყოფს მონაცემებს Model-დან View-ისთვის მოსახერხებელ ფორმატში და პროცესებს View-დან მოთხოვნებს, განაახლებს Model-ს. შეიცავს გამოსახულების ლოგიკას, მაგრამ პირდაპირ არ მართავს View-ს. ხშირად იყენებს LiveData ან StateFlow რეაქტიული განახლებებისთვის.
უპირატესობები:
- პასუხისმგებლობის განყოფილება: აუმჯობესებს კოდის წაკითხვას და შენარჩუნებას.
- ტესტირებადობა: ViewModel-ს ადვილია ტესტირება იზოლირებულად, რადგან ის არ არის დამოკიდებული Android API-ზე.
- ცვლილებების მხარდაჭერა: ViewModel გადარჩება კონფიგურაციის ცვლილებების დროს (მაგალითად, ეკრანის მორბენალი) და ავიცილებს მონაცემების განმეორებით მიღებას.
- მოდულურობის გაუმჯობესება.
მაგალითური სტრუქტურა:
// მოდელი (რეპოზიტორი მაგალითისთვის)
class UserRepository {
fun getUsers(): List<User> {
// ... მომხმარებლების მიღების ლოგიკა ...
return listOf(User("Alice"), User("Bob"))
}
}
// ViewModel
class UserViewModel(private val repository: UserRepository) : ViewModel() {
private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>> = _users
init {
loadUsers()
}
private fun loadUsers() {
_users.value = repository.getUsers()
}
}
// View (Fragment/Activity)
class UserFragment : Fragment() {
private val viewModel: UserViewModel by viewModels() // Android KTX დელეგატის გამოყენებით
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.users.observe(viewLifecycleOwner) { userList ->
// UI განახლება (მაგალითად, RecyclerView-ის ადაპტერის განახლება)
updateUI(userList)
}
}
private fun updateUI(userList: List<User>) {
// TextView, RecyclerView და სხვა UI ელემენტების განახლების ლოგიკა
}
}