WPF(.NET, WinUI) GUIプログラミング Part26

■ このスレッドは過去ログ倉庫に格納されています
2021/06/20(日) 17:04:18.66ID:7UVkl7BZ
Windows Presentation Frameworkについて語るスレ。

前スレ
WPF(.NET4.x, .NET Core) GUIプログラミング Part25
https://mevius.5ch.net/test/read.cgi/tech/1612522463

関連スレ
Windows 10 UWPアプリ開発 Part 2
http://mevius.2ch.net/test/read.cgi/tech/1499658092/

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
2021/07/10(土) 20:01:26.66ID:16vz6VAu
>>478
「メッセージのみ送る」と「いじる」の違いはこいつの頭の中にしか無いんだろうな。
2021/07/10(土) 20:06:44.05ID:uwFcR1va
MVVMでViewModelの責務は>>488なだけ

Modelが変更通知を実装するしないかは関係ない

MVVM黎明期、rigaなんとだけが日本で声上げたからあいつの馬鹿信者が増えたんだろう
しかも日本だけ笑い
2021/07/10(土) 20:17:00.58ID:MxfUHgdm
だから>>362で最初からバインディングはVVMまででいいって言ってるじゃん
何をそんな喧嘩腰で議論する必要があるのか
2021/07/10(土) 20:23:04.54ID:xJQjD86t
“model” と “view、viewModel” の開発者は
分けた方がいいかもな

modelだけで業務が回せるようになってればいいだろ
実際modelはpythonで実装するの増えて
担当者も異なる事が多いわ
2021/07/10(土) 20:43:24.78ID:Is4zF1A7
>>492
バインディングの話じゃないって分かってない?
2021/07/10(土) 20:55:14.46ID:MxfUHgdm
>>494
え?変更通知なんだから要はバインディングの話でしょ?
2021/07/10(土) 21:06:48.12ID:o3oxPhaH
今日だけで50レスも進んでるのか
ヒマすぎだな
2021/07/10(土) 21:45:12.95ID:uwFcR1va
例えば、ModelがImuutableでINPCを実装しないとするよ。で、Modelの更新はModelのメソッドを呼んで、
メソッドの戻り値として新しいインスタンスを返すとする
class Model { // ImmutableなINPCを実装しない
 public Task<Model> UpdateAsync() <- 新しいインスタンスを返す
}

で、ViewModelから更新かけるとき、更新後、最新の情報に更新する必要あるなら、それは
あくまで表示の都合だから、ViewModelにそのロジックを書いて問題ないだろ??

class ViewModel {
 public void Hoge() {
  var result = await model.updateAsync()
  // resultの結果を元にViewModel更新
 }
}

ModelがINPCを実装するかなんて本来はMVVMには関係なく俺にはこれも立派なMVVMにしか見えねぇわww
2021/07/10(土) 21:59:07.18ID:uwFcR1va
もちろん、MVVMの厳格な定義なんて知らないし、極論すれば言葉の問題になるから
どっちが正解なんて言うつもりはないが、

rigaなんとか的に
「ModelはINPCを実装して、Modelのメソッドは戻り値は返さないで、
メソッドの呼び出しの結果自身の状態を変更し、INPC経由でViewModelに通知する」


おまえらこれだけがMVVMだと思ってるだけじゃんw
2021/07/10(土) 22:07:37.44ID:321/A5HW
>>497
うん、これが王道の作り方
2021/07/10(土) 22:14:04.55ID:uwFcR1va
悪いけど売られた喧嘩で言わしてもらうが
>>485,486,490

はバカ三兄弟だわww
2021/07/10(土) 22:54:51.35ID:x1ppTpnc
ID:uwFcR1va
この人のサーバーサイドには
何が実装されてるのだろうか...
2021/07/10(土) 22:55:10.24ID:16vz6VAu
>>500
なりほど、お前さん>>478の言う「メッセージのみ送る」と「いじる」の違いが理解できるならちょっと説明してみてくれないか。
2021/07/10(土) 23:07:03.07ID:uwFcR1va
>>502
あ、ごめんひょっとして間違ってたら謝るわ

>>490って俺に対するあてつけ?じゃなかった??
ただの>>478へのレスなら謝るわ。すみませんでした。

つか、あとrigaじゃなくてググるとugaだったw
2021/07/10(土) 23:59:12.78ID:Wb8JMrdb
awaitはasyncが必要だろう。
2021/07/11(日) 00:15:04.56ID:BeeJLMuH
読みづらいからよ
続けるなら名前欄にスタンスを書いてくれないか
2021/07/11(日) 01:46:58.32ID:2ghBsept
やっぱりWPFはめんどくさいなw
507デフォルトの名無しさん
垢版 |
2021/07/11(日) 02:11:56.24ID:vIt/TVMn
>>495
そこまで話を広げるとMに通知機能があろうが無かろうが全部バインディングだろうよ
今問題になってんのはVはVMに依存してる前提で
VMとMの問題だと思うんだが違うんかな
508デフォルトの名無しさん
垢版 |
2021/07/11(日) 02:13:20.15ID:vIt/TVMn
>>506
WPFはめんどくさいっていうのが他の後発フレームワークとの比較なら分かるけど
WinFormと比較するんだったら比べものにならないくらい簡単だぞ
2021/07/11(日) 02:52:00.72ID:OgOa7vqd
>>508
ほんまかいな
2021/07/11(日) 02:59:38.37ID:bArpP16/
楽⇔面倒
簡単⇔難しい
単純⇔複雑
区別できない奴多すぎでは
2021/07/11(日) 08:40:13.02ID:x50DSKku
>>501
予想
ID:uwFcR1va 氏の構成

(client)
View
ViewModel
Model
Database Client Library


↑↓

(server)
Database Server
2021/07/11(日) 12:56:04.27ID:qjFfZwWG
一人ホームラン級の馬鹿がずっとレスしてるだけだな

MVVMでMから変更通知出すのは当たり前
VMでモデル変更して通知と言うけどモデル内で変更が生じた場合VMが変更通知出してるのかw?

VMは画面ごとに作るけどMに対応した処理はどこに書かれるんだ
まさか画面ごとか?
2021/07/11(日) 13:02:33.38ID:qjFfZwWG
MVVMが便利なのはMを操作すると通知が飛んで画面更新通知を自分でしなくて良いところ
それをVMで自分でやると言うのだから無意味なMVVMに感じる

VMで手作業の通知忘れるとバグが出る
Mに通知機能があれば通知忘れバグはない
2021/07/11(日) 15:05:54.19ID:otJ/Srhp
>>512
これは自分がホームラン級のバカと気づいていないバカ
515デフォルトの名無しさん
垢版 |
2021/07/11(日) 15:56:42.82ID:F24huBET
ここまで全部おれ
2021/07/11(日) 16:21:58.99ID:BeeJLMuH
マジカヨ死んでくれ
517デフォルトの名無しさん
垢版 |
2021/07/11(日) 17:09:03.43ID:WA0GzHcp
オブザーブバブルコレクション使ってモデル読み込むだけだよね
Mは単なるデータでいい
2021/07/11(日) 18:49:50.97ID:HaMWdASV
VMVもUserControl以外全部Xamlにしてバッチグーなローコードだ
2021/07/11(日) 19:22:59.17ID:qjFfZwWG
馬鹿が必死になってるのが痛い
2021/07/11(日) 19:37:13.31ID:lnDzPe6P
昨日の話を一人で長文書いて続きやろうとしてる必死さが笑える
2021/07/11(日) 20:23:07.63ID:r2mSMqWr
コテンパンにされた通知馬鹿w
2021/07/11(日) 20:29:52.86ID:qjFfZwWG
一人でINPCって言ってる馬鹿が勝手にコテンパンにされてるだけだろう
2021/07/11(日) 21:47:14.35ID:vIt/TVMn
>>514
オウム返しするだけじゃなくてちゃんと反論してくれ
あおり合いじゃなくて議論が見たい
2021/07/11(日) 21:58:06.58ID:x50DSKku
>>523
ここじゃあとてもとても無理だ
2021/07/11(日) 22:15:44.15ID:vIt/TVMn
>>524
なら黙ってて
2021/07/12(月) 06:31:59.34ID:n+s+RpIK
凡俗法則の実例
2021/07/12(月) 10:14:37.67ID:UFEp8oQ1
凡俗法則って言葉知らんかったわ

この外資系社員が凡俗法則を説明してんだが、例に出してるコイツ自身の資料がダメだわ
https://www.daijob.com/crossculture/takashi/20120207.html
528デフォルトの名無しさん
垢版 |
2021/07/12(月) 11:29:09.25ID:B/Smfxyl
UIへの変更通知と
Modelの購読をごっちゃにしてるのがそもそもの間違い。

前者はUIフレームワークで良く扱っているやつだが、
後者は一般的にはPush等で知られる通知処理だ。

で通知処理(Modelの購読が必要になるケース)なんてほぼほぼ無くて、
業務系システムだと株価のリアルタイム表示、チャット位なもんだ。
実装方法としてポピュラーなのはWebPush、WebSocket 、SignalRとか。

それ以外でどうしても必要になっても、通知処理みたいな面倒な機能は設けずに
通常はクライアント側でタイマー回してポーリングして凌ぐのが定石だし手堅いし
どこでもその方式でやってる。
529デフォルトの名無しさん
垢版 |
2021/07/12(月) 12:00:20.06ID:QRdBsraN
数量、単価、金額のプロパティがあるとしてどういう実装する?

VMで掛算してMはPOCOだよな
2021/07/12(月) 12:34:29.39ID:EMnZux7N
計算ロジックは当然Mでしょ。
2021/07/12(月) 12:44:59.03ID:0lrYCdZ4
POCOってなんですか?
おしえてよ
2021/07/12(月) 12:50:37.95ID:EMnZux7N
>>531
基本的な.NETのオブジェクトだけで構成されているもの。
そこは気にしなくていい。

View→UI
ViewModel→UIフレームワークの都合上必要な部分
Model→その他全部

これだけ覚えておけば十分。
2021/07/12(月) 12:57:16.22ID:0lrYCdZ4
>>532
ありがとう
ついていくぜ、旦那
534デフォルトの名無しさん
垢版 |
2021/07/12(月) 13:20:29.38ID:B/Smfxyl
POCO : Plain Old CLR Object
DTO : Data Transfer Object

現場では必ずしも正しい意味では使われておらず、
実際は POCO は DTO と同義で用いられる事が多いかな。

(というか、自分の現場じゃ DTO と言う事が圧倒的に多い)

で、DTO の意味だが
アプリケーションの各層(ViewModel層、Model層、DA層)の
データのやり取りをする単純な入れ物クラスを指す。

class Xxxx
{
public int ID { get; set; }
public string Name {get; set; }
public string Address { get; set; }
}

こんなクラス。(あ!別にクラスでなくても良い)
ここに基本ロジックは無い。
(まあ、getterとかを足す場合もあるけどね)
で現場では、WebAPI等のIF実装から自動的に生成したりする事が多い。
2021/07/12(月) 13:24:45.35ID:0lrYCdZ4
>>534
なにこの丁寧な説明!
もう抱いて!!
536デフォルトの名無しさん
垢版 |
2021/07/12(月) 13:26:43.36ID:B/Smfxyl
>>535
♀?
537デフォルトの名無しさん
垢版 |
2021/07/12(月) 13:34:36.87ID:B/Smfxyl
Model層へのアクセスは RESTful API で行う事が最近は多いとおもうから、
APIの仕様書を OpenAPI形式の APIドキュメントでもらって、
そこから自動生成するのが定石だよ。

まあ、イケてる現場なら普通やってたり検討したりするはず。
正直いって DTO とか POCO とか自動生成の最右翼コードだ。
2021/07/12(月) 15:17:10.90ID:P5SgcPEZ
>>529
素でこういう人が多いんだろうなあと思う
539デフォルトの名無しさん
垢版 |
2021/07/12(月) 16:19:35.12ID:zhwkz6A9
でもPOCOをラッピングしてPropertyChanged付けるとVMになるんですよね?
2021/07/12(月) 19:40:53.71ID:mV+dJaVa
>>529
こいつ一人が馬鹿なんだ
いい加減にあきらめろよ
2021/07/12(月) 19:48:49.64ID:mV+dJaVa
>>528 >>534
一番の馬鹿はこいつ

お前のやってる業務の現場の話じゃないWPFの話をしてるのにどんどん話をすり替えていく
土方業務話をしたいならどこかよそでやれよ

まだ恥の上塗りを繰り返すの?
ここには誰も味方はいない
2021/07/12(月) 19:50:31.26ID:mV+dJaVa
WPFのモデル層へのアクセスをRESTful API でやってるやつを教えて欲しい

馬鹿の世界では当たり前らしいけどw
2021/07/12(月) 19:51:48.31ID:P5SgcPEZ
>>542
もう恥の上塗りはやめなよ
モデルのソースがWebAPIって話でしょ
2021/07/12(月) 19:54:08.90ID:mV+dJaVa
なんでWPFのモデル層の話をしていたのに

誰かの業務のWebAPIの話をしてドヤってんの?
知能レベル低すぎ
2021/07/12(月) 19:56:53.06ID:P5SgcPEZ
>>544
なんで分からんのやろ?
ものすごいバカの壁を感じる
2021/07/12(月) 20:02:52.66ID:mV+dJaVa
>>545
そちらが馬鹿の壁を超えられないサルだからだろ

WPFのモデル層は他のフレームワークのようなPOCO(単なる入れ物)としてコーディングするだけでは通知が抜けており
MVVMの本来のメリットを享受できないという話だったのに

なぜかwebAPI使ったりロジックをVMに書いたりする話にすり替わっている
WPFではVMでロジック書いて通知が一般的だと言われても納得する人はいないんじゃないの?

旗色が悪くなると相手が理解できないと勘違いして業務の話を出してドヤってるけど誰でもわかるわ
2021/07/12(月) 20:10:18.98ID:mV+dJaVa
負けられない病にかかってるのかもしれないけど

そちらの主張どおりWPFではM層はみなiNotifyPropertyChangedの実装なしで書くのが一般的で
VMで通知が当然ですと書かれて納得すると言うのはおかしな話

本筋をねじ曲げて勝利したいのかがわからない

勝利病なの?
2021/07/12(月) 20:28:01.38ID:Yv2DGcH3
>>528
MVVMアプリ的にはクライアント・サーバーのやり取りなんざまとめてMの範疇だろうに
そこの実装がプッシュだろうがポーリングだろうがどうでもいい話
2021/07/12(月) 20:32:07.25ID:EMnZux7N
まずPOCOが単なる入れ物って認識が間違い
2021/07/12(月) 20:34:47.17ID:P5SgcPEZ
POCOがあったらそこになんちゃらRepositoryやらなんちゃらServiceがあるわけじゃん
Modelはそれらを内包した概念なわけで
もうその辺から認識がズレてるから擦り合わせようがないんだと思う

話がどんどん後退していってる
2021/07/12(月) 20:36:41.56ID:LswkHmLx
なんでPOCOとDTOをゴッチャにしてんだ
WPFでMVVMやるならDTOはMの更に先にあるもんだぞ
そっかだからやたらポコポコ言ってんのか
申し訳ないがWebに例えないと話ができない人はNGに入れとくわ
2021/07/12(月) 20:39:06.39ID:P5SgcPEZ
MVVMのMには当然DTOが内包されるよね
更にその先って何?w
2021/07/12(月) 21:02:09.50ID:Gt7PpS3W
>>534
>実際は POCO は DTO と同義で用いられる事が多いかな。

そう思ってる人と正しく使ってる人とで話が噛み合ってない感じだよな。
2021/07/12(月) 21:30:46.04ID:EMnZux7N
>>540-541
これ、自演に失敗したのかな
2021/07/12(月) 22:04:12.08ID:0kBd/ns6
あのさ>>528は例えば特に>>495対するレスで、単にUIとは関係ない一般的な
通知論を言っただけで、>>541の言いたい事を否定してるように見えないんだけど
むしろ君の味方だと思うんだが、>>541は全員敵に見えてるの??
2021/07/12(月) 22:19:19.66ID:0kBd/ns6
ああ、ごめん俺が間違ってたww
>通知処理(Modelの購読が必要になるケース)なんてほぼほぼ無くて
ここでちゃんと否定してたねw
2021/07/12(月) 22:20:11.65ID:LswkHmLx
>>555
エコシステムの話をしてるんじゃなくてWPFアプリの話をしてるので
MVVMのMをWPFアプリでどう実装するかが論点なのよ
2021/07/12(月) 22:22:33.14ID:e9fWYKI2
一応はWPFなりMVVMなりを前提として話してるもんだと思ったらまさかのUIは関係ない宣言

U I は 関 係 な か っ た !

そら誰とも話通じんわw バカ同士仲良くしてくれ
2021/07/12(月) 22:25:45.89ID:0kBd/ns6
いや、やっぱ>>556取り消すわ
やっぱ、>>528は単に>>495に対するレスにしか見えないな

>>557
論点はそこにあると思うけど>>528は通知の一般論話しただけかもしれん
2021/07/12(月) 23:41:05.62ID:B/Smfxyl
なんじゃこりゃ!
561デフォルトの名無しさん
垢版 |
2021/07/12(月) 23:46:26.66ID:B/Smfxyl
WPFに限らず一般的な話してるだけじゃん
2021/07/12(月) 23:57:26.60ID:0kBd/ns6
俺は土曜日までは会話に主な論点わかってたけど

昼間に君のレス見て、UIと通知を結びつける人がいて気になってたから、その人向けにUI関係ない通知の一般論言ってるんだろうと納得してたら

夜みて、通知の一般論言ってるだけなら全く関係ない人が怒り出してから草
って感じ
2021/07/13(火) 00:56:18.26ID:xjJDoKS2
だってWPFと関係ない話になってんだもん
むしろ論点ずらししてるっしょ
2021/07/13(火) 05:46:23.04ID:fhfe26+M
頭ひろゆきかよ
2021/07/13(火) 08:46:15.95ID:Pw5n0ID3
VMに相当する部分にビジネスロジックをガッツリ書くのはアプリ設計としてありだが、それはMVVMじゃないな
MVVMはModelにビジネスロジックを書くのが本来の定義だ
2021/07/13(火) 08:51:29.18ID:+zVQ74um
いやあ皆性格わるいねえw
醜いもんだよw
2021/07/13(火) 09:07:04.94ID:xejzJ7TX
>>547は最悪の性格だと思うww
>>528に勘違いでぶきちれてる
2021/07/13(火) 09:08:01.98ID:xejzJ7TX
ぶちきれてるねw
2021/07/13(火) 09:18:27.78ID:DZCKnpMT
>>565
そんな設計はもうViewModelなんて言葉を使うべきじゃねえわ
MVCでもMVVMでもないどころか関心の分離すら無視した全く別の何かじゃん
2021/07/13(火) 09:23:04.37ID:DZCKnpMT
どんなプログラミングパラダイムを採用しようと
UIの変更にモデルは影響されないのが原則だと思ってる

例えばWPFで作ったものをASP.netでWebインターフェイスに変更することになったとしてもモデルには一切触れなくて済むのが本来あるべき姿
しかしモデルにUIのための通知機能を入れた途端にそれは破綻する
別にモデル通知機能があったって動くから良いだろと言う話ではない

そこがモデルに通知機能を実装する違和感の根源
571デフォルトの名無しさん
垢版 |
2021/07/13(火) 10:32:02.27ID:2EC2vCMH
変更を通知するサービス

たとえばみんなが知ってる gmail(いわゆるPushメール)とかは
クライアントを WPF でも Flutter でも React でも作れると思いますが、
ではこの機能は何に相当するのでしょうか?
572デフォルトの名無しさん
垢版 |
2021/07/13(火) 10:53:55.72ID:s3qWh6Np
通知機能のあるMをVMのObservableCollectionでVに公開すると
このMはVMになりますか?
MVVMでは反則でしょうか?
2021/07/13(火) 10:55:02.74ID:t7skZb6/
>>571
何とは?
MVVMの役割のことを言っているのあれば、どれでもない
Mの中で使用される機能と言うだけ
2021/07/13(火) 11:08:48.39ID:dtNqNBdW
Amazon SNS(Simple Notification Service)は、

そのためだけにサーバーを用意しなくても、
アプリケーションからの通知を可能にするサービスです

ユーザーが何かを行ったタイミングで通知する
「イベントドリブン」なメッセージングを手軽に実現します
2021/07/13(火) 20:50:38.25ID:b1BrGGh1
>>570
>しかしモデルにUIのための通知機能を入れた途端にそれは破綻する

そこに依存性逆転パターンを使うのが常套手段。
2021/07/13(火) 22:05:10.54ID:xjJDoKS2
>>572
Collectionの要素に変更があるのを監視する必要がなければそれでOK
別に反則じゃないと思う
2021/07/14(水) 19:37:54.90ID:Ftj7Gfdw
今日は勝ちたい病のVMにビジネスロジック実装する君は来てないの?
2021/07/14(水) 21:01:12.91ID:FWHo5b9L
どうした、恋しいか?
2021/07/14(水) 22:40:50.82ID:UYQRt03E
こないと>>547の馬鹿みたく関係ない人攻撃しだすからなww
2021/07/14(水) 22:48:26.38ID:Ftj7Gfdw
え?
ID:B/Smfxylは馬鹿だよ
2021/07/14(水) 23:03:29.16ID:UYQRt03E
久しぶりにみたわ
必死過ぎて全員敵に見える病ww
2021/07/14(水) 23:13:04.52ID:wjhDeS6u
家に鏡がないのか?
鏡を買えば毎日見られるぞ
2021/07/15(木) 02:12:58.55ID:rXkSqNZ0
自分がそれで見られるからって
他人が同じことして見られると思ってるあたりが馬鹿だよね
2021/07/15(木) 08:43:28.31ID:erbvpp8v
みんな皮肉が上手だなあ(鼻ホジ)
585デフォルトの名無しさん
垢版 |
2021/07/15(木) 10:10:56.93ID:Gu3XCrlD
>>576
いやMの通知をVが監視する状態だよ
586デフォルトの名無しさん
垢版 |
2021/07/15(木) 14:23:21.77ID:VeQWWe0f
ロジックはコマンドに書いてるけどコマンドってVMの仲間じゃないの?
2021/07/15(木) 19:55:28.67ID:yhXjFIIz
>>585
原理主義通すならその通りなので止めた方が良い
大規模プロジェクトで規約作る段階とかならあなたの言う通り
そうでないなら工数とのバーター
2021/07/15(木) 20:40:50.25ID:yPgIH8DR
そういやコレクションでもしっかりVM挟めって人がWPF出来て直ぐの頃は言う人いたよな
2021/07/15(木) 23:20:18.67ID:twFSqmod
なんか人によってVMの定義が違うのかねぇ?
WPFだとDataContextにセットするのがVMだと認識しているが。
2021/07/15(木) 23:31:38.36ID:yPgIH8DR
>>589
ListViewなどでも、内部的にListViewItemのDataContextにコレクションのアイテムがセットされるから何も変わらないよ
それにVM挟めというやつが昔はわりといた
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況