0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

■ はじめに

説明

先日ふと個人開発しようと思い、技術要件だったり実装する機能だったりをまとめていました。
そんな中、「アーキテクチャどうしよう。そもそも MVC 以外よく知らないや」という状況だったんで MVVM(クリーンアーキテクチャはまた今度)について調べて自分の言葉でまとめてみました。
過不足あれば是非ご指摘ください!

■ MVVM (Model View ViewModel) とは

ソフトウェアアーキテクチャの一つであり、アプリケーションの設計パターンの一つです。

  • Model:
    • 【役割】データやビジネスロジックを管理する。
    • 【説明】ユーザーの情報やアプリケーション全体のデータを保持し、ビジネスロジックを実行する。
    • 【例】 例えば、タスク管理アプリの場合、ユーザーが作成したタスクのリストやその状態(完了しているかどうか)を管理する。新しいタスクを追加したり、タスクの完了状態を更新したりする処理もここで行う。
  • View:
    • 【役割】ユーザーインターフェース(UI)を構築し、ユーザーの操作を受け付ける。
    • 【説明】画面上にボタンやテキストフィールドなどの UI 部品を画面に配置し、ユーザーがそれらを操作する。
    • 【例】タスク管理アプリの場合、画面上にタスクの一覧や新規タスクの入力フィールドを表示する。ユーザーはここでタスクを追加したり、完了したタスクをチェックすることができる。
  • ViewModel:
    • 【役割】View と Model の間でデータのやり取りを行い、ビジネスロジックを処理する。
    • 【説明】View から受け取ったデータを整形し、Model に送る。また、Model の変更を View に通知して UI を更新する。ビジネスロジックの実装やデータの整形を担当する。
    • 【例】View から新しいタスクの入力を受け取ってそれを適切なデータ構造に変換し Model に渡す。タスクが完了した際にはその情報を View に反映させて UI を更新する。

タスクアプリで MVVM を採用した場合、どういう流れになるのかを考えてみる。

  1. 【View(ユーザー)】アプリを操作し、タスクAを追加する。
  2. 【View(ViewModelへの通知)】View はタスクAの追加を ViewModel に通知する。
  3. 【ViewModel】View から受け取ったタスクAの情報を適切なデータ構造に整形し、Model に渡す。
  4. 【Model】ViewModel から受け取ったデータ(タスクA)を実際にデータベースやストレージに追加する。
  5. 【ViewModel】View に必要な更新を通知する。
  6. 【View】ViewModel からタスクAが追加された通知を受け取り、必要に応じて UI を更新して、ユーザーに新しいタスクが追加されたことを表示する。

メリット

  • 運用・メンテナンスの向上
    • ロジック(Model)とUI(View)を分離することで、コードの可読性と再利用性が向上。
  • 単体テストのしやすさ
    • ViewModel は UI に依存しないため、単体テストがやりやすい。
  • データバインディング
    • View / View Model どちらかの値(データ)が変わると、自動的にもう片方も変更される。なので、2回の変更が必要なくなり1回で済む。手間が減るのはもちろんのこと、あっちはAなのにこっちはBみたいな不整合が起きない。

デメリット

  • ViewModel の負担増加
    • ViewModel に多くの責任が集中し、複雑化する可能性がある。
  • 過剰設計
    • プロジェクトが小さい(ミニマムな個人開発レベル)場合、MVVMの導入が過剰設計となり、逆に負担になることがある。
      この場合、MVCの方が適しているかも?(個人の見解)

ディレクトリ構造

ディレクトリ構造としては下記のような感じ。
JavaScript のライブラリである mermaid というもので作成。
各フォルダを作り、その配下にファイルを作成する。
(Flutter のプロジェクトなので拡張子が dart だが、ここは気にしなくて大丈夫です)

スクリーンショット 2024-07-02 14.56.54.png

以上。

■ 参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?