変更前
これはクライアントサイドのアプリケーションの例で、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に似てる (図は同記事より引用)。