2016年8月3日水曜日

MVVM式コーディング作法

プログラムには似たような用語が沢山ある。

service, task, worker, process, sequence, job,,,etc

OSやシステムによって用法が異なったりするので煩雑な部分である。
今回はそのあたりの情報整理しつつ、MVVMフレームワークでどうマッチングさせていけば良いかについて書きたいと思います。


まずシステム全体を見ると
システムの外部と内部、ユーザが触れる、触れないに分けられます。
上記用語がどの枠に属するか分類してみます。

①外部・触れる :View{ユーザ向け}
②外部・触れない :Service{公開API}
③内部・触れる :View{保守メンテ用}
④内部・触れない :Task{内部処理} = worker, process, sequence, job

こんな具合になると思います。
次にデータの流れに着目してみます。
大体はViewからデータの塊(コンテキスト)がなげられてそれをシステムが処理する流れになります。

つまり、

 job = View()

の関係が成り立ちます。

その事を踏まえて情報の流れを考えると

 ①→④
 ②→④
 ③→④

不思議な事に④に集約される関係ができあがっています。

④の部分を掘り下げていきます。

キーワードとして4つ
 worker, process, sequence, job

ありますが、Jobは外部からの入力なので引数です。

ここからコンピュータサイエンス的に表現すると、
Jobが投げられ、バッチ処理を実行して、結果が出てきます。
これを
 y=f(x)
と定義した場合、それぞれの用語に当てはめて考えると

 result = task(job)
 result = worker(job)
 result = process(job)
 result = sequence(job)

一律、同じ意味で言い回しが違うという事が分かりました。
それぞれ使う場面によって意味合いを分けてるのかもしれませんが、
汎化してTaskという用語に集約しちゃいます。


ここで情報の整理すると、
jobを作る・処理する側の2択の関係が見えてきました。

jobを作る側
 ①外部・触れる :View{ユーザ向け}
 ②外部・触れない :Service{公開API}
 ③内部・触れる :View{保守メンテ用}

jobを処理する側
 ④内部・触れない :Task{内部処理}


式に表すと
 job = ①
 job = ②
 job = ③
 result = ④(job)


システム用語で煩雑な部分が上記式で表す事ができました。

次にMVVMパターンに当てはめていきます。


viewは画面なので
viewmodelはjobになります。
jobが決まったら処理を実行する工程になります。
それが目的のtaskに対してjobを入れて実行し、
async/awaitなどで完了結果を待つということです。



task内部の作り方は以前に書いた記事もあるのですが、
見つからないので次回新たに書きたいと思います。

0 件のコメント:

Androider