- 1 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 05:53:16.97 ID:oY263ilm.net]
- WPF(Windows Presentation Foundation)について語るスレ。
前スレ WPF(.NET, WinUI) GUIプログラミング Part30 https://mevius.5ch.net/test/read.cgi/tech/1667010874/ 関連スレ Windows 10 UWPアプリ開発Part 3 https://mevius.5ch.net/test/read.cgi/tech/1627556967/ コードを貼る場合は以下のサイトの利用をお勧め。 https://ideone.com/
- 855 名前:デフォルトの名無しさん mailto:sage [2023/08/30(水) 10:42:16.63 ID:mm/q7vOw.net]
- そんな定義は聞いたことないな
- 856 名前:デフォルトの名無しさん mailto:sage [2023/08/30(水) 11:12:09.35 ID:FKrsdOsE.net]
- 究極の疎結合って意味では合ってる
CommunityToolkit.mvvmもプラットフォーム非依存だし極端な話、上側がWinUI3でもVMそのまま動くってことでしょ ただ実際問題すげーめんどくさいとは思うがw
- 857 名前:デフォルトの名無しさん mailto:sage [2023/08/30(水) 13:38:27.33 ID:Zjd+Qgp2.net]
- だね、5chブラウザのほうでViewModelでウィンドウクラス?を参照してたのは気になってた
まぁ、最初の1回だけは勉強のためMVVMガチガチにやって頑張ってもいいし そこは本人次第
- 858 名前:mdysdev ◆XSDsAilQpD0E mailto:sage [2023/08/30(水) 14:56:17.68 ID:rmxbhQ8d.net]
- ありがとう、System.Windowsを分離してみる。
>>848 確かにWindowは分かりやすく「ん?」ってなるけど、 ClipBoardとかBitmapImageとかもみんなSystem.Windows配下なんだよね。 これらの処理を全部持ってくと、Viewにも結構ロジックが必要になりそう。 UIフレームワーク固有の機能なんだから疑問を持つのがおかしいのかもだけど
- 859 名前:デフォルトの名無しさん mailto:sage [2023/08/30(水) 23:23:43.59 ID:I012WzjW.net]
- View固有の機能じゃなければ分離しなくてもよい
- 860 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 00:04:15.85 ID:tqam1yBh.net]
- その前にenumの機能のおさらいをしたほうが良い
- 861 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 01:17:12.25 ID:UxD03clT.net]
- MVVMといえばうちの会社でのプロジェクトでさぁ例えばだけどmodelにcircleクラスがあるとするじゃん
んでそれをコンストラクタの引数に取るVmCircleなるクラスをわざわざ作るのよ。んでそれを各種viewmodel内部でいじるんだけど、VmCircleはCircleのviewmodelとか言ってるの おかしいでしょそれはviewmodelでもなんでもないでしょって言ったんだけどいやviewmodelだって これ俺がおかしいのか?
- 862 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 01:44:14.25 ID:k/7LWfvb.net]
- >>852
サーバサイドでも使う Entity とかを .NET Standard で共有して、 クライアントサイドではそれをINotifyPropertyChanged を実装したクラス (VM) に変換する必要がある、 もしくは将来的に変更通知が必要になる可能性を見越してそうしておく、 とかならありえなくはないんじゃない?
- 863 名前:デフォルトの名無しさん [2023/08/31(木) 07:06:57.56 ID:BoGIe8nI.net]
- >>845
変な理解しているな。 ViewModelでBitmap加工などは普通にやる。 当然、System.Windowsをusingする。 Viewのエレメントに直接アクセスするなという事だけ。 いわゆる委譲だな。 例えば、Viewにパラメーター渡すために、IxxxViewRepositoryインターフェースをViewに継承させ、そのレポジトリをViewModelにインジェクションすればそれでOK。 ContainerのChildrenは、ViewModelにダイナミック生成バインドできないので、Add、Remove、Move操作をそういう方法でやる。 DDDなどのクリーンアーキにチャレンジしてみれば、その辺はインチュイティブに理解できるようになるよ。
- 864 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 07:56:35.25 ID:UxD03clT.net]
- >>853
そもそもviewmodelってviewとmodelをつなぐ役割をするものじゃないんですかね 別に対応するviewなんて何も無いただデータとそのメソッドを持つだけのクラスをviewmodelと言えるんでしょうか
- 865 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 11:36:17.81 ID:GMvg4a1K.net]
- https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/stable-channel#version-14
うんこ品質の時間です 突然1.4がリリースされやがった 9月末が予定じゃなかった?
- 866 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 12:07:44.06 ID:+9swg57/.net]
- >>854
それ、すごい労力かかる割にはWPF専用のViewModelになっちゃうじゃない。 いまUIライブラリ移行の過渡期なんだし、再利用できるViewModelとか考えないの?
- 867 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 12:40:08.29 ID:k/7LWfvb.net]
- >>855
俺の理解が間違ってるかもしれないけど、 その Circle クラス?が画面上の円のコントロールかなにかの DataContext になってるなら ViewModel であるといえるんじゃないだろか。 画面上のどこにもバインドしてないんなら違うと思うけど。 例えば ListBox の ItemsSource にバインドするコレクションの各要素の型は ViewModel と言えると思う。 ListBoxItem を 1つの View として見た時にその DataContext になるから。 ↓これとか ItemViewModel というのを定義してる。 https://blog.okazuki.jp/entry/2016/04/08/233620 ItemViewModel
- 868 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 13:22:03.44 ID:WwAx/vtc.net]
- viewmodelはmodel用のviewじゃなくてview用のmodel
各種viewmodelでcircleモデルのview用の変換やviewからの入力に対してモデルとの橋渡しをする場所としてvmcircleを作ってるんならまあ理解できる
- 869 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 14:00:23.53 ID:+wESSzqb.net]
- 何なら納得するんだろうか?
画面に複数のタブページがあるアプリがあって メインVMに複数のタブページ用のVMがリストなどで持たれている(直接のモデルじゃなくて) これでおかしいと思うのかどうか
- 870 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 15:36:13.08 ID:KSwuKB63.net]
- XAML Islandsとか名前がよくない
絶海の孤島のイメージだ
- 871 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 15:53:03.73 ID:A6umWt5F.net]
- Islandsで孤島?
- 872 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 16:07:40.97 ID:qE8kvwKZ.net]
- 複数形だから孤島ではないな
- 873 名前:デフォルトの名無しさん [2023/08/31(木) 16:52:36.04 ID:BoGIe8nI.net]
- >>857
VieModelの再利用? 再利用するのはViewの方であって、ViewがViewModelへのバイディング権がある。 それで、フレキシブルな画面構築ができる。 ロジックの再利用は、Domain層にまとめる。
- 874 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 17:36:52.11 ID:+9swg57/.net]
- >>864
ん?例えばMAUIとかWASMに移植するときはViewModelを全部作り直すってこと? 大変じゃね?っていうかそれってMVVMじゃなくね? MVVMって画面とロジックの分離であって、画面が変わるたびに作り直さなくちゃいけないなら それはViewModelではなくViewの範疇では?
- 875 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 18:44:34.81 ID:+wESSzqb.net]
- ViewModelはviewとmodelの間が互いにデコボコしてて
綺麗にくっつかない場合に間に入るつめもの もともときれいにくっつくなら不要 Viewが変わればまた形に添ったViewModelが必要になる
- 876 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 19:17:40.59 ID:0zAKJthF.net]
- クライアント側にあるView層にViewとViewModelがある
サーバー側にModel層があって自分の場合はREST full APIで作られたSaaS出ある場合が殆ど 業務ロジックはModel層内に全てあるので再利用可能
- 877 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 19:22:25.33 ID:0zAKJthF.net]
- View層にはWPFを動作させるための処理しかない
View層をReactで作ってもそこにあるのはReactを動作させるための処理しかない 業務ロジックは全てサーバー側にあって全く無駄にはならない
- 878 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 21:51:01.50 ID:lnQo2el+.net]
- >>762
今思いついたんだが「sugar dragonfly」はどう?
- 879 名前:デフォルトの名無しさん mailto:sage [2023/09/01(金) 16:45:19.11 ID:ba1FgNHl.net]
- 機器の通信サンプルアプリをWPFで作るのは有り?
サンプルを参考にする相手がWPFを使ってるかわからないから、WinFormsの方が無難かな? 一番無難なCUI版は出来たからコアの通信部分は変わらなくて、通信結果を見やすくするだけなんだけども
- 880 名前:デフォルトの名無しさん mailto:sage [2023/09/01(金) 17:16:03.23 ID:E0s4hvcN.net]
- ActiveXでExcel VBA対応するのが無難だな
- 881 名前:デフォルトの名無しさん mailto:sage [2023/09/01(金) 19:47:27.67 ID:+613Qa0i.net]
- >>866
それはVMじゃない。どっちかというとMVCのCに近い。
- 882 名前:デフォルトの名無しさん mailto:sage [2023/09/01(金) 21:56:19.74 ID:42muqi3u.net]
- >>866の説明はCよりVMよりだと思う
VMはModelを特定のView用に変換した状態を持っておくもの MVC Vーーーーーーーー 監視 ーーーーーーー>M Vーーー入力ーー> C ーーー入力ーー>M V<ーーーーーーー 通知 ーーーーーーーーM MVVM Vーーー監視ーー> VM ーーー監視ーー>M Vーーー入力ーー> VM ーーー入力ーー>M V<ーー通知ーーー VM <ーー通知ーーーM
- 883 名前:デフォルトの名無しさん mailto:sage [2023/09/01(金) 22:06:47.51 ID:XOi5r4E6.net]
- みんなめちゃくちゃだな..
- 884 名前:デフォルトの名無しさん mailto:sage [2023/09/01(金) 22:16:55.21 ID:+613Qa0i.net]
- >VMはModelを特定のView用に変換した状態を持っておくもの
なにその珍解釈
- 885 名前:デフォルトの名無しさん mailto:sage [2023/09/01(金) 22:33:11.78 ID:dq5C6mfu.net]
- 一人だけ俺様理論がおるな
- 886 名前:デフォルトの名無しさん mailto:637 [2023/09/01(金) 22:55:04.64 ID:86UzGWyS.net]
- みんなVIEWを差し替え差し替えでMODELを流用することやってるの?
- 887 名前:デフォルトの名無しさん mailto:sage [2023/09/01(金) 23:31:31.63 ID:hl1Bipr4.net]
- いや全然
- 888 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 00:18:16.99 ID:fOS98KnE.net]
- 自己満ですなーー
WPFのMVVMがまさに究極の自己満 MVVMとかvue.jsとかangular、androidとかでも普通に使うし そっちは実装コストもかからん
- 889 名前:デフォルトの名無しさん mailto:637 [2023/09/02(土) 05:21:08.01 ID:6VujaKd3.net]
- android studioはwindows formのポトベタと同じ感覚なんだが?
- 890 名前:デフォルトの名無しさん [2023/09/02(土) 08:18:23.73 ID:Fau+Wvgs.net]
- >>877
モニターアプリでは良くやるよ。 化学プラントの製品毎の画面やライン管理の製品毎の32~4096接点モニターとかね。 モニターと非常停止等の共通アクション画面なら流用する。 ただし、Viewのビハンイドコードトリミングは必要。 それらを再利用というには微妙だな。 VMはペアで消費するものと考えるのが普通。 再利用というのはロジックの再利用を言うのが一般的じゃね?
- 891 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 09:33:36.47 ID:fwdoqn2z.net]
- 結局VMに何らかの描画以外のロジックを書いてる人が多いんだろうなと
mvvm原理主義者じゃなければ別に好きなようにしたらいいんだが WPFは結局どのように実装すべきなのかハッキリとしたパターンが確立されなかった これが一番の問題だった 明確に役割分担してオブジェクトの生死を適切に管理してる人間がどれだけいるのか
- 892 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 09:49:03.02 ID:fOS98KnE.net]
- >>875
あってるぞ MをVに表示させる為に必要な形に変えたものだ 例えばM(Web APIのResult)をVM(Vにバインディンク可能なデータ型)に変換してVと接続する
- 893 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 10:06:25.37 ID:fwdoqn2z.net]
- 状態と言う意味が通じていないので話をしても無駄
v vm mでそれぞれ状態は持ってる 普通はmの状態のことを話すんだけど双方の話がかみ合っていない
- 894 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 10:12:13.25 ID:fwdoqn2z.net]
- 本来はMと全層から利用されるビジネスロジックが主体なんだけど
vmでガッツリロジックなり制御なりのコード書いてる人が多い そういう人から見るとvmは状態を持っていると言う主張になる
- 895 名前:デフォルトの名無しさん [2023/09/02(土) 10:21:43.71 ID:Fau+Wvgs.net]
- >>882
だね。 ViewModelはインスタンスプールの場という認識が無いとそうなるね。 Bitmap加工にしても、ロジックは別の層に置くもの。 ロジックはDomain層、ドライバーはInfrastructure層でカキコしておけば再利用というスタイルの本筋が見えてくる。
- 896 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 10:42:05.01 ID:ePvjWEyO.net]
- wikipediaだとこうだな。VMはVが表示すべき状態を保持するというのが普通の理解だと思う。
ViewModel ViewModel(ビューモデル)はViewを描画するための状態の保持と、Viewから受け取った入力を適切な形に変換してModelに 伝達する役目を持つ。すなわちViewとModelの間の情報の伝達と、Viewのための状態保持のみを役割とする要素である。
- 897 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 10:53:39.97 ID:UWvP69T4.net]
- という事はバリデーションもvmじゃなくてmでやるの?
- 898 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 11:59:17.23 ID:+7egXD0v.net]
- >>887 の定義だとちょっと密に思えてしまうな
https://learn.microsoft.com/ja-jp/dotnet/architecture/maui/mvvm 大まかに言うと、ビューはビュー モデルを "認識" し、 ビュー モデルはモデルを "認識" しますが、 モデルはビュー モデルを認識しておらず、 ビュー モデルはビューを認識していません。 したがって、ビュー モデルではビューをモデルから分離させ、 ビューとは独立してモデルを進化させることができます。
- 899 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 12:40:51.82 ID:CPf5VJuY.net]
- 君たち一旦モデルの事はわすれろよ
めちゃくちゃすぎる
- 900 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 13:16:00.96 ID:CPf5VJuY.net]
- >>882の言うようにハッキリとしたものがないと同意した上で言わせてもらうが
>そういう人から見るとvmは状態を持っていると言う主張になる VMは状態をもつ めちゃくちゃすぎる 普通に状態を持つ
- 901 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 13:18:09.94 ID:fwdoqn2z.net]
- アプリケーションの真の実態はMなんだから忘れることじゃないな
勘違いされがちだけどMはデータ置き場でもライブラリでもないアプリケーション本体 VMは表層でしかない メッセージの仲介所 上で書かれたインスタンスプールでもない 仕事をするにあたりただどこかにあるモデルへの参照を持っているだけ ModelAとModelBを参照して計算してModelCに入れるのはVMの仕事ではない VMはMに単純なメッセージ飛ばすのが仕事
- 902 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 13:35:29.82 ID:CPf5VJuY.net]
- ロジックを単にロジックと表現したりするとこみると
ロジックをビジネスロジックとプレゼンテーションロジックに分けて 考えてないよね ここで>>882のじゃあ明確なその区別のルールは?って問題が出てくるが
- 903 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 13:44:31.42 ID:fwdoqn2z.net]
- どうも自分の書き込み全体じゃなくて部分的な文章しか見てもらえてない気がする
>>884とかガン無視されてる
- 904 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 13:46:57.02 ID:fwdoqn2z.net]
- あ、vmが状態を持つのはそのように書いたからであってあまり意味はない
適切なのかどうかは知らない
- 905 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 14:04:49.20 ID:CPf5VJuY.net]
- でも>>892の見ると、君完全にFatModelの某riga◯◯氏の主張だよね
- 906 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 14:09:38.75 ID:fwdoqn2z.net]
- >>896
誰それ? VMは可能な限り薄くすべきだよ
- 907 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 14:19:20.78 ID:CPf5VJuY.net]
- >VMは可能な限り薄くすべきだよ
いやいや、ViewModelは作る画面をモデル化したものだから それは作る画面次第だから VM薄くするために要件にまで介入する気なの? (もちろん、VMに限らずスパッゲッティ排除したりすることはいいことだが)
- 908 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 14:32:46.57 ID:Opj29vAW.net]
- >>888
サーバー側でも結局必要になる処理なんで バリデーション機能を提供するWebAPI定義してそっちでやってる パフォーマンスもローカルでやるのと変わらん 自分設計の案件は 小計行の合計値など画面に表示されるものほぼ全てサーバー側での計算値だ
- 909 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 14:40:30.69 ID:CPf5VJuY.net]
- >メッセージの仲介所
>デコボコしてて綺麗にくっつかない場合に間に入るつめも これが先じゃないんだよ 例えば、学生を扱う時に「Student」クラス作ってNameとかAgeとか 状態持たせて「モデル化」するのと同じように 作る画面を同じように状態抜き出してロジック与えて名前を 付けたものがViewModel こっちが先
- 910 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 14:48:44.91 ID:CPf5VJuY.net]
- で、ViewModelの実装において画面が複雑なら、ビューモデルに書くプレゼンテーションロジック
が複雑になるし、Modelにドメインロジックの実行を依頼したりする だから、 >メッセージの仲介所 とか表現が極端すぎる ViewModelは画面をモデル化したもので、立派に独自のプレゼンテーションステート やプレゼンテーションロジックも持つ立派な1つのエンティティです
- 911 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 15:38:06.62 ID:5BMaIqoW.net]
- >>900
>作る画面を同じように状態抜き出してロジック与えて名前を >付けたものがViewModel 作る画面(View)のもとになるのがModelなのでその過程をどの程度意識しているかどうか 言い換えればViewを所与のものとして受け取っているかどうかの違いでは? それ以外の点はほぼ賛同できる
- 912 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 16:13:13.84 ID:ePvjWEyO.net]
- >>902
>作る画面(View)のもとになるのがModelなのでその過程をどの程度意識しているかどうか アプリケーションの実装はそう考える場合があるかもしれんがMVVMパターンとして MとVMにそういう関係があることを求めてはいないと思うがな。
- 913 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 16:37:06.13 ID:CPf5VJuY.net]
- >>903
いいこというね >>890のモデルを忘れろってそういうことなんだわ ViewModelはあくまでも作る画面をモデル化しておとしこんだのであって、 その作る画面がどのModelが元になってるか関係ないんだわ
- 914 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 17:02:01.28 ID:fwdoqn2z.net]
- 自分でロジックブーメラン投げて刺さってるし触れるだけ無駄なんだなと
ヒマつぶしにriga○○が何なのか調べてみたけどわからなかった 更に調べるとかなり前から懐かしのugayaのことをrigayaと言ってる人物がいる 多分この人なんだろう rigayaと言うのは別人がいてNVEncの作者
- 915 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 17:08:17.47 ID:CPf5VJuY.net]
- >>905
ごめんごめん rigayaはNVEncの作者でugayaのほうか悪かった
- 916 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 17:18:55.85 ID:fwdoqn2z.net]
- ロジックブーメラン
- 917 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 17:35:30.95 ID:CPf5VJuY.net]
- 何、しつこく
それも謝ってほしいのか? すみませんでした
- 918 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 17:45:52.02 ID:ePvjWEyO.net]
- なんの話をしているんだろうと思ったがこれか?
https://ugaya40.hateblo.jp/entry/model-mistake
- 919 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 17:57:45.40 ID:CPf5VJuY.net]
- そうそれ
全部Modelに押し込めってことか?って事で FatModelって勝手に呼んだけど 完全な正解はないから俺も含めてみんなおれおれMVVMを信じるだけw
- 920 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 18:42:57.12 ID:ePvjWEyO.net]
- 俺も>>909はVMの要件とは思わんな。
ただ、V→VM→Mというクリーンアーキテクチャで考えるならMからVMへの依存性逆転に使うインターフェースは M側に含めることになるかな。それが「Modelの影」にあたるのかもしれんが。 言葉としては違和感があるな。どっちかというと「Viewの影」の方がしっくりくる。
- 921 名前:デフォルトの名無しさん mailto:sage [2023/09/02(土) 22:11:29.82 ID:fOS98KnE.net]
- 「Viewの影」か...
VMにはMからの応答データ以外にも カレントフォーカスやら リスト系入力コントロールのカレントインデックスやら 入力コントロールの変更前値なども保持してるね これらはMではあまり取扱かわない
- 922 名前:デフォルトの名無しさん [2023/09/03(日) 18:43:28.44 ID:PKYmB8Sw.net]
- >>911
Mにインジェクションはまずくね? そもそも、EntityやModelは定義とロジックが入るクラスで、かつ、Domainに属するクラス。 ViewとViewModelはApplicationレイヤー。 Domainとは、外部参照ができない領域で、そこにPropertyインジェクションはリスクを覚悟した使い方。 何事もトリッキーが必要になる事はあるが、SOLID原則は可能な限り守るべき。
- 923 名前:デフォルトの名無しさん mailto:sage [2023/09/03(日) 18:47:29.66 ID:McvOhRnv.net]
- この5chブラウザって実行できねぇじゃねぇかよ
とりあえずWindows 11 ProのSandbox環境立ち上げて 実行してもSeach app in the store?だっけ? とダイアログが出て実行できねぇ .NET 7のランタイムとかいれてもだめやわ だるっ
- 924 名前:デフォルトの名無しさん mailto:sage [2023/09/03(日) 19:07:48.99 ID:Zxyqi4pM.net]
- >>93
>Mにインジェクションはまずくね? どこからそんな解釈が?
- 925 名前:デフォルトの名無しさん mailto:sage [2023/09/03(日) 20:37:38.19 ID:TWuH3asg.net]
- 本来のMVVMだとVMがMに命令を出してその結果をVMのプロパティーに反映だが
コレクションはMに無いとどうにもならないし、それをVMがリダイレクトする この時点で初期のVMMVは破綻しているよな
- 926 名前:デフォルトの名無しさん mailto:637 [2023/09/03(日) 21:08:54.26 ID:0JPdNbB1.net]
- デザイナーとプログラマーと別けてやるならそうだか、自分一人でやるんならマイルールで頑張れば良い。他人は他人、気にせずに行こう!
- 927 名前:デフォルトの名無しさん mailto:sage [2023/09/03(日) 21:16:42.81 ID:Zxyqi4pM.net]
- >>916
>本来のMVVMだとVMがMに命令を出してその結果をVMのプロパティーに反映だが 本来のMVVMと言うが、MとVMのやり取りにおける役割分担ってそんなに明確に定まったものはないと思うが。
- 928 名前:デフォルトの名無しさん mailto:sage [2023/09/03(日) 22:05:14.34 ID:Dhh2faXN.net]
- 【クライアント側】
View (WPF) ViewModel(WPF) Model(c#, 業務ロジック以外のロジック、例えばUI処理に必要なロジックなど) 【サーバー側】 Model(c#, 業務ロジック) みたいに実際はクライアント側にもModelが必要になる事が多い
- 929 名前:デフォルトの名無しさん mailto:sage [2023/09/03(日) 22:46:24.33 ID:TWuH3asg.net]
- >>918
創世記の頃はさっき書いたようなのだったが、ビジネスロジックをほぼ全てMに書く派閥ができてカオスになった あと、ReactivePropertyでMから簡単にリダイレクト出来るようになったのも大きい
- 930 名前:デフォルトの名無しさん mailto:sage [2023/09/03(日) 23:12:27.45 ID:3gQjLtaF.net]
- 今時はPropertyChanged.FodyやObservablePropertyで自動化
便利になりました
- 931 名前:デフォルトの名無しさん mailto:sage [2023/09/03(日) 23:49:15.10 ID:Dhh2faXN.net]
- クライアント側やクライアント側にもModelが存在しえるが
ここにはUI要素が殆どなく(あったとしても抽象化されている) WPF以外からも再利用が可能だ ViewModelは特定のView専用に実
- 932 名前:装されており
異なる種類のViewの実装から再利用する事は望めないのが普通だ [] - [ここ壊れてます]
- 933 名前:デフォルトの名無しさん mailto:sage [2023/09/03(日) 23:50:04.10 ID:Dhh2faXN.net]
- 訂正)サーバー側やクライアント側にもModelが存在しえるが
- 934 名前:デフォルトの名無しさん mailto:sage [2023/09/04(月) 01:14:09.52 ID:vsxnPNVu.net]
- VewModelはViewの構成要素(データやコマンド)には依存するけど実装には依存しないでしょ
- 935 名前:デフォルトの名無しさん mailto:sage [2023/09/04(月) 19:44:13.60 ID:J0Btfpeo.net]
- 昔SilverLightと言うのがありまして…
- 936 名前:デフォルトの名無しさん mailto:sage [2023/09/04(月) 19:56:38.46 ID:1eoZIF84.net]
- 光ちゃん好き
- 937 名前:デフォルトの名無しさん mailto:sage [2023/09/04(月) 20:00:29.56 ID:fuW/8CV2.net]
- M、VMはそのままで、VをWPFでもUWPでもUnoでもMAUIでもコマンドプロンプトでもまだ存在しないビューにしても成り立つのが理想のMVVM
まあ本体のバージョンやらなんやらで制約受けるんだけども
- 938 名前:デフォルトの名無しさん mailto:sage [2023/09/04(月) 22:51:14.61 ID:7E+/PPwt.net]
- >>927
機種やOS依存しないのはMだけで、VMはWPFからWinUI3に変わるだけでも作り直し Win32とWinRTは名前空間が別だ
- 939 名前:デフォルトの名無しさん mailto:sage [2023/09/04(月) 23:30:01.70 ID:J0Btfpeo.net]
- 前からいるVMは作り直さなくてもいいと言う人は実際に使ってない気がするんだな
- 940 名前:デフォルトの名無しさん mailto:sage [2023/09/05(火) 05:52:19.52 ID:DX9vicfo.net]
- Vが変わったらVMも作り直しとかそもそもお前のはMVVMじゃないぞ
- 941 名前:デフォルトの名無しさん [2023/09/05(火) 20:28:59.35 ID:qu07bRnx.net]
- MVVMでは、Modelはただの定義であって、それがどこにあろうが、ローカルインスタンスはViewModelにある。
ModelインスタンスはViewにバイディングされるが、Model管理はサブスティチューターやインタラクター等の中間介在者経由で行う。 Modelにインジェクションは、中にパーサーを持たせ、ファイヤーや他にアソシエートさせるという事だろうが、それは、再利用性を損ねる事になる。 MVVMは見かけはMVVMだが、実際には、疎結合実現のために、取り巻くサービスから構成される。
- 942 名前:デフォルトの名無しさん mailto:sage [2023/09/05(火) 21:33:41.74 ID:s337iXA9.net]
- お前の中ではな
- 943 名前:デフォルトの名無しさん mailto:sage [2023/09/05(火) 21:50:07.00 ID:vxLs2+zd.net]
- ここに限らずプログラマー板は全般的に設計の話題になるとグダグダだよね
- 944 名前:デフォルトの名無しさん mailto:sage [2023/09/05(火) 22:14:49.56 ID:FTgFHkq3.net]
- もう今はMFC/WinForms/WPFという過去の遺産グループに一括りにされる時代なのよね
WPFはなんていうか、オーパーツを発掘してる気分、腐ってやがる早すぎたんだって
- 945 名前:デフォルトの名無しさん mailto:sage [2023/09/05(火) 22:47:35.31 ID:vcpA6cRm.net]
- 何が言いたいのかさっぱり
- 946 名前:デフォルトの名無しさん mailto:637 [2023/09/06(水) 05:28:15.62 ID:CIPjTMvR.net]
- 結局プログラム言語とかプログラミング作法じゃなくてアイデアなんだよな。
それをセンスと言うのかな? MVVMはオートメーションの作法なんだよ。 俺は機械作業の一部になりたくないな。
- 947 名前:デフォルトの名無しさん mailto:sage [2023/09/06(水) 06:00:45.77 ID:aEV5JQPD.net]
- ViewModelの再利用性なんて無限のコストをかけていいならいいけどさ
円周率を表示するアプリがあって3.14と表示するかおよそ3と表示するか画像取り込んで表示するかなんて Viewの仕様次第でいくらでも膨らむのにどうやってViewModelの再利用性を決めるんだ?
- 948 名前:デフォルトの名無しさん mailto:637 [2023/09/06(水) 06:51:57.86 ID:CIPjTMvR.net]
- UIは変化(進化)するWindowsとandroidも違うし、あと数年でMVVMなんて有ったなぁとなるかも知れない。昔の構造化とか。
- 949 名前:デフォルトの名無しさん [2023/09/06(水) 09:12:10.70 ID:UTcPybKQ.net]
- MVVM言いたいだけ
- 950 名前:デフォルトの名無しさん mailto:sage [2023/09/06(水) 09:46:23.58 ID:iXwPGoYi.net]
- おののののか
みたいな?
- 951 名前:デフォルトの名無しさん mailto:sage [2023/09/06(水) 09:47:40.27 ID:gzG1FQ5Q.net]
- >>937
さすがにその例なら再利用するだろ なんで一から作り直すんだ?
- 952 名前:デフォルトの名無しさん mailto:sage [2023/09/06(水) 11:09:07.24 ID:EbyA7lxn.net]
- データをどう見せるかなんてViewのシゴトだしな
コードビハインド書きたくないとかはワガママだ
- 953 名前:デフォルトの名無しさん mailto:sage [2023/09/06(水) 11:35:08.73 ID:Hs78urxK.net]
- >>942
それな! 本来Vのコードビハインドに書くものを外だししただけでこれがVMとか言っちゃうのが多すぎる。 >>937とかその典型。それに再利用ってのは本来将来のコストを下げるためにやるもの。 半端もんは口出さずに100万年ROMってろってこった
- 954 名前:デフォルトの名無しさん mailto:sage [2023/09/06(水) 11:44:28.70 ID:CARezZ1i.net]
- あくまでも個人の感想です。
- 955 名前:デフォルトの名無しさん mailto:sage [2023/09/06(水) 11:57:04.90 ID:jZLgLXW4.net]
- VMはVに依存する=WPFならWPF専用になる
汎用クラスだけでVMが書けない以上不可能なんだよね
|

|