Java で クリーンアーキテクチャ - ゼロから始める先行開発
GMO 成瀬さん
APIとフロントの開発順序が API -> フロント 逆では?
良くないけどよくあること
UI のデザインが後から変わる
試行錯誤のためにプロトタイプを作れないか
ヘキサゴナルアーキテクチャ
ビジネスロジック以外を Plugable にする
ビジネスロジック以外: クライアントインターフェース、データストア
ビジネスロジックを点在させない: このモチベーションは同じ
クリーンアーキテクチャはビジネスロジックの外側の具体的な実装を記載した
Entities: ドメインの概念を表現するモデル
UseCases: アプリケーション、Entity を動かす
Interface Adapters:
Controller: Input Port を利用する
Presenter: Output Port を実装する
Gateways
Usecase Interactor: Input Port(Boundary) を実装する、 Output Port を利用する
UseCase Output Port
UseCase Input Port
Framework & Drivers
ビジネスロジックが依存しないようにする
DIP
依存の方向: ドメインロジックが詳細を扱わないようにする
Controller: Input を 要求するInput Dataに変換する
Input Data: Data Structure、 DTO
Input Boundary
Usecase Interactor: 実際の処理を行う
DataAccess Interface
データモデルとドメインモデルを分ける
DataAccess
Output Boundary
Presenter: Output Data から View Model への変換
処理の流れを規定する、構造を規定する
Stub, Mock を利用する
返り値を返さなきゃいけない
コントローラに大量の UseCase の Inject が増える
大量のめんどくさいコード
Presenter を捨てる
Controller を Fat にして、Dto をそのまま使う
Message Bus
Interactor をまとめて、Inject を一つに
NORIO
DI、Adapter などを一括生成、Scaffold
制御することで探索を減らす