10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

.NET Multi-platform App UI(通称.NET MAUI)でサポート予定のModel - View - Update (MVU)パターンとは

Posted at

はじめに

Microsoftが開催する開発者向けの大型イベント「Microsoft Build 2020」の中で、.NET Multi-platform App UI(通称 .NET MAUI)が紹介されました。紹介された内容はこちらを参照ください。

上記の紹介記事の中で私が気になったのは、掲題でも記しておりますが、以下の内容です。

最も関連性のあるもののひとつは、アプリケーションの開発パターンに関わるものだ — MAUIはModel-View-View-Model(MVVM、ReactiveUIを含む)とModel-View-Update(MVU、現在のXamarin.Formsではサポートされていない)をサポートする予定である。

MVVMパターンはWPFというWindowsアプリケーションの開発で用いられている開発パターンなので馴染みがあったのですが、MVUパターンに関してはそのようなものがあることすら知りませんでした。
本記事ではそんなMVUパターンについて自分なりに調べた内容を紹介します。

Model - View - Update (MVU)パターン

概要

MVUパターンはElmというプログラミング言語で導入された開発パターンです。参考文書にMVUパターンの紹介がありましたので、そちらを日本語に訳しつつ紹介しようと思います。

ElmでのModel - View - Updateパターンとは、以下で構成されたパターンとなります。

  • Model : アプリケーションの状態
  • View : 状態をHTMLに変換する方法
  • Update : メッセージに基づき状態を更新する方法

そして、これらは以下の順序で関連しています。

  1. 現在のアプリケーションの状態(Model)をHTML変換する(View)。
  2. HTML変換されたページ(View)から受け取ったメッセージに基づき状態を更新する(Update)。
  3. 更新された現在のアプリケーションの状態(Model)をHTML変換する(View)。
  4. (上記の繰り返し)...

MVUパターンは遷移が単方向であり、私は非常にシンプルな開発パターンであると感じました。

なぜ .NET MAUIでMVUパターンが採用されるのか

この理由について、Microsoft開発者ブログに記載されていました。
どうやら、以下の3点においてMVUパターンが優れているようです。

  • データと状態の管理が単方向のフローとなるように促進できる
  • 必要な変更のみをUIに適用できるため、素早く更新できる
  • ホットリロードとの相性が良い

ホットリロードできると開発した見た目が即座に反映されるため、UIの見た目や使い勝手を確認しながら開発できます。現在のWPF開発でもホットリロードはできるのですが、相性が良いということはおそらく実行パフォーマンスがよくなったりするのだと推測されます。これは、開発者にとってかなりの利点だと思われます。

おわりに

MVUパターンがなぜMVVMパターンに併せて採用されたのか知らなかったので、今回調べてみてかなり勉強になりました。
今後、MVUパターンに則ったコードを書いてみたいと思いました。またコードを書きましたら、記事で紹介しようと思います。

参考文書

10
3
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
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?