MVVMにおいてVMで非同期は必要か?async void/Taskのどちらが良いか?非同期処理の例外ハンドリングは?

C# MVPを始めとした方々がガチ議論!(誰でも編集可なので抜け等あればご自由に)
9
尾上 雅則 @ugaya40

大変遅れましたが XAML Advent Calender 2014 12/10分公開いたしました>< qiita.com/ugaya40/items/… WPF、怒りのDataContext伝播

2014-12-11 12:17:44
リンク Qiita WPF、怒りのツリー外DataContext伝播 - Qiita この記事は [XAML Advent Calender 2014](http://qiita.com/advent-calendar/2014/xaml)の 12/10分の記事です。 自分のブログが復活していないので復活次第そちらへも...
白い高野さん @masaru_b_cl

@ugaya40 これ、最後の段について、「非同期はVMではなくMで扱う」にもつながる話、とよみましたがあってます?

2014-12-11 12:32:17
尾上 雅則 @ugaya40

@masaru_b_cl はい、そういうことです。Livetレベルから制約を加えるか検討しています

2014-12-11 12:32:45
白い高野さん @masaru_b_cl

@ugaya40 やはり。なんというか、面白いですねぇ。

2014-12-11 12:35:56
白い高野さん @masaru_b_cl

非同期処理をMで閉じて、MのNotifyPropertyChangedをVMではReactivePropertyで拾う、とかやるとスッキリしそうねぇ

2014-12-11 12:49:29
じんぐる (Takaaki Suzuki) @xin9le

@masaru_b_cl そのMの非同期処理を開始するのは誰ですか?

2014-12-11 12:51:30
白い高野さん @masaru_b_cl

@xin9le VMが叩けば、ってあれ?投げっぱなしで叩くことってできるんでしたっけ?

2014-12-11 12:53:42
じんぐる (Takaaki Suzuki) @xin9le

@masaru_b_cl 投げっぱなしはできますが、それが良いかどうかですよね。結局VMが非同期処理を開始するなら、そこでawaitすれば良いのでは?感が湧き上がるので。

2014-12-11 12:55:55
白い高野さん @masaru_b_cl

@xin9le 私もその辺り、知見がないので自分の中での結論は出せないんですよね。ただ、PDSという面で見れば、非同期処理ってPの都合関係ないなとは思います。

2014-12-11 12:58:15
白い高野さん @masaru_b_cl

WPF+MVVMでなんか非同期通信するアプリ書いてみないと、自分の中で結論出せない。

2014-12-11 13:01:26
白い高野さん @masaru_b_cl

個人的にはスクリーンキャストとかでVMでも非同期派とMだけで非同期派で殴りあってるの見たい

2014-12-11 13:03:37
白い高野さん @masaru_b_cl

ReactiveProperty、Knockoutのko.observable()っぽいところも含んでるのだな。

2014-12-11 13:18:09
Ktz @ktz_alias

@masaru_b_cl VMはasync/awaitで同期的に扱い、Mだけ非同期にするのがいいと思う

2014-12-11 13:20:35
白い高野さん @masaru_b_cl

@ktz_alias Mにasync Taskなメソッドはやして、VMからは await model.DoSomething(param); するってことですよね?

2014-12-11 13:21:43
白い高野さん @masaru_b_cl

あれ?なんかよくわからんくなってきたな。

2014-12-11 13:24:18
白い高野さん @masaru_b_cl

Mにasync Taskなメソッドはやす→それを呼ぶVMにもasyncキーワード登場って理解で合ってるよね?

2014-12-11 13:31:06
白い高野さん @masaru_b_cl

で、この記事みたいにICommandの実装がasync void Execute(param)になる? > 非同期プログラミング - 非同期 MVVM アプリケーションのパターン: コマンド msdn.microsoft.com/ja-jp/magazine…

2014-12-11 13:32:18
白い高野さん @masaru_b_cl

async void Executeにごちゃごちゃ書かないで、await m.DoSomething(param);だけになることを目指すのが、現実解って感じなのかな?

2014-12-11 13:36:09
Ktz @ktz_alias

@masaru_b_cl 基本はそれでいいと思う。問題はMから連続的にストリームでデータがやってくる場合で、単純にawaitできないので、VMはRxにSubscribeする形にする必要がありそう。多分RxはMに用意(定期的にプッシュするため)

2014-12-11 13:46:18
尾上 雅則 @ugaya40

@masaru_b_cl @xin9le VMは同期でModelたたけばいいんですよ。

2014-12-11 14:42:32
尾上 雅則 @ugaya40

@masaru_b_cl @xin9le なぜならModelのメソッドに戻り値はないからです

2014-12-11 14:45:37
白い高野さん @masaru_b_cl

@ugaya40 @xin9le Mには async void DoSomething(param)良いして、その中でawaitってことですよね?

2014-12-11 14:46:07
1 ・・ 6 次へ