post Image
MVVMを勉強するときに参考になったリンク集 & 概要まとめ

MVVMについて勉強したことのまとめ

今更ながら、MVVMな開発をお仕事で行なっています。
全然理解できていないので、色々と調べつつメモを残していきます。

また、こんな実装はMVVMじゃない?ってきなことも今後の反面教師になるように記載してみました。

MVVM

  • プログラムを3つの要素、Model、View、ViewModel に分割
  • 各要素は、単方向に依存している View -> ViewModel -> Model
  • MVVMは、あくまでUI周り構成について触れているだけであって、Modelの中身については、各自で考える必要がある

View

  • ViewModelの情報を使用してUIを描画 = binding
  • ViewModelにアクションを送信 = commands

ViewModel

  • UIに描画するのに必要な情報を準備、保持 = Modelを保持?
  • Viewから送られたアクションをModelに通知
  • Modelから、UIの描画に必要な情報に変換保持

Model

  • ViewとViewModelがやること以外全て受け持つ
  • つまり、データ本体、加工、取得、保存などは、VMで行わず全てMdoelが受け持つ

こんな実装はMVVMじゃない?

Viewの場合

  • ViewがVMのプロパティを直接操作している
  • ViewがアクションをVMに送るときに、コールバッグ(blockやobservable)を実行する
  • ViewがViewModelから受け取る描画内容変更処理内で、新たにVMの操作をしている
  • View内でViewModelを差し替えることができない
    また、ViewModelを差し替えたときにUIが元の状態に戻らない

ViewModelの場合

  • ViewModelがModelのプロパティを直接操作している。なるべく、アクションとして通知、操作する
  • Viewを知っている
  • ViewModel内でModelを差し替えることができない
    また、Modelを差し替えたときにUIが元の状態に戻らない
  • Modelの情報をViewに通知する以外の機能を実装している = ビジネスロジックが実装されている

Modelの場合

  • View・ViewModelを知っている

MVVMと一緒に紹介されるクリーンアーキテクチャについて

  • ドメイン駆動開発(DDD)やユースケース駆動開発(UCDD)を意識して、ビジネスロジックをUIやFrameworkから引き離し、それぞれの層毎に役割と責任を分離したArchitecture
    のことだそうです。。。よくわかりません。
  • PresenterをViewModel,Usecase以降をModelと考えれば、MVVMのModel層を整理したものなので、別物ではなくMVVMの実装例のはずと思っています
  • 疎結合のため仕様変更、アップデート、UTに強そう
  • コストが高いので、初期構築のみの受託開発、オンライン専用アプリには全く向かないと思う。状況に応じて使用する

参考:まだMVC,MVP,MVVMで消耗してるの? iOS Clean Architectureについて

MVVMについて参考になったorなりそうなリンク集

Wikipedia

記事

技術ブログ

スライド

iOS実装例など


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。