Sobes.tech
Middle

MVVM memarlıq nümunəsi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

MVVM (Model-View-ViewModel) — bu arxitektura nümunəsidir, kodu üç qarşılıqlı əlaqəli komponentə bölmək üçün qurulur:

  • Model: Məlumatları və biznes məntiqini təmsil edir. UI-dən asılı deyil.
  • View: ViewModel-dən gələn məlumatları göstərir və istifadəçi hərəkətlərini (məsələn, kliklər) ViewModel-ə göndərir. View passivdir və məlumatların işlənməsi məntiqini ehtiva etmir.
  • ViewModel: Model və View arasında vasitəçi kimi fəaliyyət göstərir. Model-dən məlumatları göstərmək üçün uyğun formatda təqdim edir və istifadəçi hərəkətlərini işləyərək Model-i yeniləyir. ViewModel çox vaxt məlumat bağlama (data binding) mexanizmlərindən istifadə edir və məlumatlar dəyişdikdə View-ni avtomatik yeniləyir.

Əsas prinsiplər:

  • İki tərəfli məlumat bağlama: ViewModel-dəki dəyişikliklər avtomatik olaraq View-də əks olunur və əksinə (uyğun alətlərdən istifadə etməklə).
  • Test ediləbilərlik: ViewModel UI ilə əlaqəli olmadığı üçün asanlıqla müstəqil test edilə bilər.
  • Məsuliyyətlərin bölünməsi: Görünüş, məlumat və biznes məntiqinin aydın bölünməsi inkişaf və dəstək işlərini sadələşdirir.

Əksər hallarda Vue.js, React (bir neçə varyasiya ilə), Angular kimi deklarativ UI olan tətbiqlərdə istifadə olunur.

Sadə struktur nümunəsi:

// Model
class User {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}

// ViewModel
class UserViewModel {
  constructor(user) {
    this.user = user;
    this.displayName = `${user.name} (${user.age})`;
  }

  incrementAge() {
    this.user.age++;
    this.displayName = `${this.user.name} (${this.user.age})`; // View üçün displayName yenilənir
  }
}

// View (təxminən, deklarativ framework-də necə görünə bilər)
/*
<template>
  <div>
    <p>{{ userViewModel.displayName }}</p>
    <button @click="userViewModel.incrementAge()">Yaşı artır</button>
  </div>
</template>

<script>
import { User } from './model';
import { UserViewModel } from './viewModel';

export default {
  data() {
    return {
      userViewModel: new UserViewModel(new User('Ivan', 30))
    };
  }
}
</script>
*/