Sobes.tech
Middle

Mis on MVVM arhitektuurimuster?

sobes.tech AI

Vastus AI-lt

MVVM (Mudeli-Vaade-MudeliVaade) — see arhitektuurimuster, mis struktureerib koodi, jagades rakenduse loogika kolme omavahel seotud komponenti:

  • Mudeli: Esindab andmeid ja äriloogikat. Ei sõltu kasutajaliidesest.
  • Vaade: Kuvab andmeid mudelist ja saadab kasutaja tegevused (näiteks klõpsud) mudelile. Vaade on passiivne ega sisalda andmetöötlusloogikat.
  • MudeliVaade: on vahend mudeli ja vaate vahel. Pakub andmeid mudelist sobivas formaadis ning töötleb kasutaja tegevusi, uuendades mudelit. Sageli kasutab andmebinding-mehhanisme, et automaatselt uuendada vaadet andmete muutmisel.

Põhiprintsiibid:

  • Kahepoolne andmebinding: MudeliVaate muudatused kajastuvad automaatselt vaates ja vastupidi (sobivate tööriistade kasutamisel).
  • Testitavus: MudeliVaadet on lihtne isoleeritult testida, kuna see ei ole seotud kasutajaliidesega.
  • Vastutuse jaotus: Selge vastutuse jaotus vaate, andmete ja äriloogika vahel lihtsustab arendust ja hooldust.

Kasutatakse sageli deklaratiivse kasutajaliidese rakendustes, nagu Vue.js, React (mõningate variatsioonidega), Angular.

Näide lihtsast struktuurist:

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

// MudeliVaade
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})`; // uuendame displayName
  }
}

// Vaade (ligilähedaselt, kuidas see võiks välja näha deklaratiivses raamistikus)
/*
<template>
  <div>
    <p>{{ userViewModel.displayName }}</p>
    <button @click="userViewModel.incrementAge()">Vanust suurenda</button>
  </div>
</template>

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

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