@yu_ma

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Androidアプリ開発におけるViewModelの役割について

 最近、Androidアプリ開発を始めた(プログラミング自体最近始めた)初心者なのですが、ViewModel、そしてMVVMというものの存在を知りました。私の中で、「MVVMとは、Modelでデータ全般やsetOnclickListenerなどのイベント処理を扱い、Viewで画面表示を扱い、ViewModelでそれ以外の処理を扱う」という考えのもと、ViewModelを使ってアプリ開発の練習をしました。
 その中で、リストを扱ったのですが、ViewModelを用いて、リストにいれる数値の管理を行ったところ、自分の技術力不足のためか、とても煩雑かつメンテナンスも非常に困難になるものができあがってしまいそうになり断念しました。クリック処理もViewModelの方ではfindViewByIdが使えないため、MainActivityにwhen分岐を使いながら1つ1つ書くことになりそうでした。
 簡易的なものですがイメージ図で表すと以下のようになります。
 イメージ図.JPG

 これを通して、ViewModelは全てのアプリに入れるべき要素なのか、入れることによりどういったメリットデメリットが存在するのか、初心者が手を出してよいものなのか、という疑問がわいてきました。
 用語もなんとなくでしか理解できておらず、イメージ図も正しく伝わっているかわからないですがご教授いただけるとありがたいです。

0 likes

1Answer

 簡単なアプリならまだしも、難しいアプリになればなるほど必要性は増してくると思いますよ。
ここで簡単にMVVMそれぞれの役割を上げておくと

  • Model:ユーザーデータなどAPIから取得したものやユーザーが入力したデータを管理する。
  • View:表示するもの
  • ViewModel:UIに表示するデータを保存しておくもの
    です。

MVVMのメリットは、UIを一つ一つ更新しなくてもよくなることです。
MVVMを使用してアプリを作るときは、僕であればまずはUIに表示するデータを洗い出します。
そして、あらかじめUIの動作を決めておくのです。そうすることによって、ModelやViewModelの更新によってUIが自動的に更新されてくれます。そして、アプリを開発するときはその状態管理だけを考えていればよくなるのです。

 ここで一つモデル設計をするときの注意点なのですが、モデルには必ずViewで扱いやすい形式でデータを入れることが大切です。

 始めたばかりでは、とても複雑に見えるかもしれませんがとても大切な概念なのでぜひ使うことをお勧めします。

0Like

Comments

  1.  書くのを忘れていましたがKotlinで開発するときにXMLでUIを構築すると、後々面倒になります。UIは、プログラムから定義するのがいいと思うので(※僕の感想です)、Flutter(Dartですが)やJetPackCompose(Kotlin)などの使用も検討してみてください。コードからUIを生成するものは、ステートによって柔軟な対応ができて僕的には好きです。
  2. @yu_ma

    Questioner

    ありがとうございます!JetPackComposeの存在は知らなかったです。
    ViewModelは別途クラスファイルを作成したのですが、Modelも同じように〇〇Modelというような名前でファイルを作成するものですか?
  3. 僕はしますね。
    Flutterで申し訳ないのですが下にあるのが自作のTodoアプリのGithubです。
    https://github.com/Oya-Tomo/todo-app

    僕はこんなフォルダ構成にしています。
  4. @yu_ma

    Questioner

    ありがとうございます!

Your answer might help someone💌