アプリの外側とのやりとりをModelから取り除く
変更前
これはクライアントサイドのアプリケーションの例で、Modelの背後でWeb APIやonpopstate/pushStateを利用しており、Modelが太くなってる様子。
HTTP History | ^ | ^ | | | | v | v | .---- View \<-- M o d e l \<-- Intent \<--. | | `----------------\> DOM -------------------'
変更後
Web APIもonpopstate/pushStateもアプリケーションの外側にあり、DOMと同レイヤに存在するものであると位置づける。アプリケーションの外界とのやりとりを行う、ビジネスロジックを含まないアダプタを、ドライバーと呼んで抽象化する。ドライバーには入力を受け取る機能と出力を購読させられる機能がある。いまつくってるアプリでは以下の2つのドライバーを用意して使った。
.---- View \<-- Model \<-- Intent \<--. | | |------------\> DOM ----------------| |------------\> History ------------| `-----------\> HTTP ---------------'
参考
The Clean Architecture | 8th Light で言及されているClean Architectureに似てる (図は同記事より引用)。