レイヤアーキテクチャ・DI
ヘキサゴナルアーキテクチャ
オニオンアーキテクチャ
と見てきました。
さらに他の選択肢について
他の選択肢 クリーンアーキテクチャ
Robert Martinが2012年に提唱したアーキテクチャ。
日本語訳されている方がいらっしゃいました。ありがたい。
そちらを読んでもらうと分かる通り、前回までのヘキサゴナルアーキテクチャやオニオンアーキテクチャなどを参考に作られたものとのことです。
やはり、
- 外側が内側に依存します。
- DIが必要です。
- 層は必ずしも4層である必要はありません。
難しくないのと、技術的な複雑さにも対応できるバランスの取れたアーキテクチャだと思います。
やはりここでも大事なのは、ドメインを隔離することですね。
実際のところ
このように、ドメインを隔離するアーキテクチャを見てきましたが、実際に適用するのは大変な場合があります。
例えば、Railsを使えば、モデルはActiveRecordですのでRDBのDBに影響されます。Railsでなくても、例えば、Javaの便利なORMであるDoda2もモデル側にDoda2のアノテーションが割り込みます。
外側の円で使われているデータフォーマットを内側の円で使うべきではない。とくに、それらのフォーマットが、外側の円でフレームワークによって生成されているのであれば。外側の円のどんなものも、内側の円に影響を与えるべきではないのだ。(クリーンアーキテクチャ 日本語訳より)
これを守るために冗長にDTOを使って、オブジェクトtoオブジェクトの変換が必要になったりすることもあるかもしれません。
そういう意味でも、アーキテクチャの選択とともに、先日の記事の通り、どうフレームワークを選択するかも大事になると思います。