なぜ必要なのか
業務ルールは画面やデータベースが変わっても保ちたい。詳細技術への直接依存があると、交換がルール変更へ波及します。
どう解決するのか
- 単一プロセスでR1のA17は未保存。HTTP・CLIからSaveArticleへIDを渡し、SavedArticleで検証。
- SaveRepository経由でメモリ・組み込みDBへ保存。依存はアダプター → ユースケース契約 → ドメイン。呼び出しは外へも進むが、境界は単純なデータだけ。ORM行は外に置く。
- 成功は0 → 1件、反復も1件。空ID・書き込み前の失敗は0件。修正後に再試行。
説明用の架空の例
依存は方針へ向かう
R1 · A17 · 最初は未保存
単一プロセス · 点線の囲み
1 · フレームワーク・ドライバー
HTTP / CLI · メモリ / 組み込みデータベース
↓ ソースの依存
2 · アダプター
コントローラーはIDを変換、保存アダプターはレコードを変換
↓ ソースの依存
3 · アプリケーションの方針
SaveArticle
SaveRepositoryインターフェースを所有
↓ ソースの依存
4 · ドメインの方針
SavedArticle
空の読者・記事IDを拒否
保存の境界で
← ソースの依存SaveRepository(内側)← 保存アダプター
実行時の呼び出し →SaveArticle → SaveRepository経由 → 保存アダプター(外側)
境界には単純なIDと保存完了の結果のみを渡す。ORM行は外に残す。四つの領域は例であり、必須のフォルダー構成ではありません。
- 保存 → 繰り返し:0 → 1 → 1件。保存完了を返す。
- 空の保存先から:空のIDや書き込み前の失敗 → 0件。修正後に再試行。
HTTP・CLIとメモリ・組み込みデータベースは代替案です。データ移行を意味しません。
どんな考え方なのか
クリーンアーキテクチャはソースの依存を方針へ向けます。実行時の呼び出しは内側が所有するインターフェース経由で外へ進めます。Martin
ヘキサゴナルのポートと組み合わせられます。四つのフォルダーは必須ではありません。
境界のデータ変換にも管理費用がかかります。
この選択を話し合う
コメントは全言語で共有。投稿にはGitHubログインが必要です。