Help us understand the problem. What is going on with this article?

クリーンアーキテクチャ+DDDでAndroidアプリを作る(序)

More than 3 years have passed since last update.

はじめに

 これは、アーキテクチャや技術要素に対して個人的な思想を示す記事です。
 技術的な問題の解決策を提示するものではありませんので予めご了承ください。
 また、記事内容に誤り等がございましたら、お手数ですがコメントにてご指摘いただけると幸いです。

背景

 結構前にEric Evans先生のDDD本を読んだけど、全く身についた気がしない。
 その後、クリーンアーキテクチャの図を見て、わりとピンときた気がした。
 クリーンアーキテクチャとDDDは似たような考え方であるらしく、趣味で作っているアプリやなんやで、これを活かしていきたいと思ったので試しに何かを作る。(何を作るかは決めてない。)

 本記事では、(何をつくるかも決めてないけど)アプリの設計に入る前に、
 クリーンアーキテクチャのポイントについて考える。

クリーンアーキテクチャのポイント

The Clean Architecture - Link

Untitled.png

 これが上記のピンときた図(をトレースしたもの)。
 矢印は依存の関係性を示しており、内部の層は外部の層を知らない。
 図自体の説明をしている人は他に沢山いると思うので割愛。

インフラ層は外に置くもの

 
 僕が「なるほど」と思ったのが、DBが矢印の始点になっているところ。
 今まで面倒くさいと思っていた部分の1つが、アプリとDBが密に結合していることだったので、これである程度解決することができるのかと納得できた。
 また、思想としてインフラ(手段)がドメイン(目的)に依存している形が美しいと思う。

アーキテクチャ 1層 2層 3層 4層 4→1層参照
レイヤ化アーキテクチャ インフラストラクチャ ユーザインタフェース アプリケーション ドメイン 可能
クリーンアーキテクチャ Framework&Drivers Interface Adapters Application Business Rules Enterprise Business Rules 不可
ヘキサゴナルアーキテクチャ 任意(特に定義されていない) Port&Adapter Application Application 不可
オニオンアーキテクチャ Infrastructure/UserInterface/Tests Application Services Domain Services Domain Model 不可

 レイヤ化アーキテクチャでは、インフラ層の参照はどこからでも可能であるので、この考え方よりクリーンアーキテクチャの方が制約が厳しくなっている。
 この考え方は、ヘキサゴナルアーキテクチャやオニオンアーキテクチャでも同じような感じらしい。

制御の流れを単一にすること

 
 Fluxアーキテクチャでも言われているみたいだが、クリーンアーキテクチャでも単方向の制御について言及されている。
 クリーンアーキテクチャでは、必ず以下の流れで制御しなければならない。

 コントローラー -> ユースケース -> プレゼンター

 これをAndroidで考えたとき、ActivityやViewなんかからコントローラを呼び出すことになると解釈した。
 この概念を自分なりに考えてクラス図・シーケンス図に落としてみた。

登場人物.png

制御の流れ(flow of control).png

 あえて図上には表現していないが、これを実現するためにはフレームワークによるDIP( 依存関係逆転の原則)の適用が必要になる。
 最も重要なのが、ユースケースオブジェクトへのOutputPortおよびRepositoryインターフェースのインジェクション機能だと思われる。

 まずは、これを解決するためのフレームワークを考えることにする。
 今回はここまでとして、次回は適用するフレームワークについて考えたい。

参考

 ・エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)
 ・The Clean Architecture
 ・クリーンアーキテクチャ(The Clean Architecture翻訳)
 ・Hexagonal Architecture
 ・ヘキサゴナルアーキテクチャ(Hexagonal architecture翻訳)
 ・The Onion Architecture
 ・Flux

y-takano
関心事はjava, html5, css3, jsあたり。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away