24. Model
イテレーター化
Model
ループ
出題
問題選択 問題集
回答
答え
正誤判定
次の問題へ
全問終了 No
Yes
結果
合格判定
25. Model
イテレーター化
int correctCount = 0;
foreach (var q in _questions)
{
var qm = new Q(q); 問題選択
出題 yield return qm;
var isCorrect =
qm.Response == q.AnswerIndex;
if (isCorrect) correctCount++; 正誤判定
答え yield return new A(isCorrect);
}
var correctRate = correctCount / num;
結果 yield return new Result( 合格判定
correctRate, _acceptableRate);
26. Interaction Channel
ViewとModelをつなぐ部分
View Model
ループ
出題
問題を表示 問題選択 問題集
回答 回答
答え
答えを表示 正誤判定
OK 次の問題へ
全問終了 No
Yes
結果
結果を表示 合格判定
27. Interaction Channel
ViewとModelをつなぐ部分
Modelの制御フロー Model
(イテレーター)を登録
public class Channel<TMessage>
{
public Channel(IEnumerator<TMessage> coroutine)
public Task RunAsync() 実行
public void AddAsyncHandler(Func<T, Task<TR>> handler)
where T : Tmessage
}
ViewはTask非同期で応答
View
同期版(Func<T, TR>)もある