質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

解決済

MVVMの概念について(とくにViewとViewModelの関係について)

WhiteTempest
WhiteTempest

総合スコア404

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

2回答

2評価

0クリップ

1089閲覧

投稿2022/03/08 07:14

編集2022/03/23 14:00

前提:質問者知識概要

主言語:

  • C++
  • Java

その他経験言語:

  • C#.NET
  • VB.NET
  • VB6
  • VBA
  • Python
  • Ruby
  • Delphi
  • etc...

MVVMの経験:

  • C#.NETのWPFでほんの少し、かじった程度

前提:MVVMの概念理解度/概要

View - ViewModel - Model の関係について、
漠然役割イメージは下記の通り持っています。
■View
ユーザーインタフェース(UI)。
XMLなどで作成。

■ViewModel
UIとモデルの橋渡し。
クラスとして作成。

■Model
実処理部。
クラスとして作成。

質問内容

主にViewModelの役割やクラス設計等について、
実務レベルで乖離していないか、ご意見/ご回答いただけると幸いです。

①ViewModelはViewの数だけ存在すべきという認識で合っていますか?
※複数のViewで流用しやすいように、様々なデータを保有したViewModelを作るのは、いかがなものかと疑念を抱いたため、
質問にあげさせていただきました。
※あくまでViewの各コンポーネントから参照されるデータ群であるべきなので、
Viewの数だけViewModelを作成するのがオーソドックスと考えました。
細かいお話だと宗教論争に発展するかもしれませんが、
ご回答者様の主観で構いませんので、ご意見いただけますと幸いです。

②ViewとViewModelのデータ的関係については、
Bindingでリンクしているだけなので、
ViewModelの構成要素(クラスメンバ)が変化しない限り、
Viewへの影響は無い(ようにするすべき)認識で合っていますか?

③たとえば、DBから取得したデータを画面等で利用する場合、
データ本体を格納しておくデータクラスをModel部で保有しておき、
Model部でViewModelにデータセットすることで、
Viewに自動反映させるイメージで大きく認識に相違無いですか?
※ViewModelとViewのBindingはおこなっていると仮定

④たとえば、複数の画面から1つのデータを利用したい場合などは、
Model、「共通データ」、View1/ViewModel1、View2/ViewModel2
を準備しておき、
Model部で「共通データ」をViewModel1/2へセットすることで、
View1/2に反映させる形がオーソドックスでしょうか?

⑤ViewModelは橋渡しが主な役割の認識ですが、
簡単なデータ変換であれば実装しても良いものでしょうか?
それとも"変換"はロジカルな部分となるため、Modelに実装すべき内容でしょうか?
※True->1、1->Trueなどの簡易な変換であれば、持ち合わせても良いのでは?と考えたため、質問させていただきました。

的外れな内容、意図が理解できない言い回し等含みましたら大変申し訳ありませんが、
ご助力いただけますと幸いです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。