なぜ必要なのか
業務ルールのテストに実際のデータベースやサーバーが必要だと負担が増えます。外部ツールを交換できる接続点が必要です。
どう解決するのか
- 単一プロセスでR1のA17は未保存。HTTP・CLIアダプターが入力ポートからSaveArticleを呼ぶ。
- IDを検証し、SaveRepository経由でメモリ・組み込みDBへ保存。保存アダプターはアプリ所有のポートに依存し、アプリは保存実装を直接参照しない。
- 成功は0 → 1件、反復も1件。空ID・書き込み前の失敗は0件。修正後に再試行。
説明用の架空の例
接点を替え、アプリケーションを保つ
R1 · A17 · 最初は未保存
単一プロセス · 点線の囲み
1 · 駆動するアダプター
- HTTP
- CLI
参照 → 入力ポート
2 · アプリケーション
入力ポートSaveArticle
IDの検証と保存の調整
出力ポート · ここが所有SaveRepository
3 · 駆動されるアダプター
- メモリ
- 組み込みデータベース
SaveRepository ← アダプターの参照
実行時の呼び出し
- HTTP / CLI
- SaveArticle
- SaveRepository
- メモリ / 組み込みデータベース
破線の経路:出力ポート経由で保存先を呼び、保存完了を呼び出し元に返す。
アプリケーションはアダプター実装を直接参照しません。テストではメモリがデータベースを代替できます。六つの構成要素は必須ではありません。
- 保存 → 繰り返し:0 → 1 → 1件。保存完了を返す。
- 空の保存先から:空のIDや書き込み前の失敗 → 0件。修正後に再試行。
HTTP・CLIとメモリ・組み込みデータベースは代替案です。データ移行を意味しません。
どんな考え方なのか
ヘキサゴナルアーキテクチャはポートと技術別アダプターでアプリケーションを接続します。六角形は六つの構成要素を要求しません。Cockburn
内部の方針にはクリーンアーキテクチャの依存ルールを適用できます。
ポートとアダプターで間接処理が増えます。
この選択を話し合う
コメントは全言語で共有。投稿にはGitHubログインが必要です。