0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Clean Architecture】Policy and Level(ポリシーと抽象化のレベル)

Posted at

はじめに

アーキテクチャの世界では「ポリシー(Policy)」と「レベル(Level)」という考え方が重要です。
これらは単なる抽象的な概念ではなく、システムをどの層に配置すべきかを決める指標 になります。


ポリシー(Policy)とは

  • システムのルールや振る舞いを定めるもの
  • ビジネスルール、ユースケース、ドメインロジックが該当
  • 長期的に変わらず、システムの「心臓部」となる部分

例:

  • 「会員登録にはメールアドレスが必須」
  • 「注文金額が1万円を超える場合は送料無料」

レベル(Level)とは

  • 抽象度の高さ・低さを表す概念
  • 抽象度が高いほど「方針(Policy)」に近い
  • 抽象度が低いほど「実装(Details)」に近い

レベルの軸

  • 高レベル(High Level): ビジネスルールや方針 → 抽象的で長生き
  • 低レベル(Low Level): DB操作やUI制御 → 具体的で変わりやすい

Policy と Level の関係

Robert C. Martin の「Clean Architecture」では以下の原則が示されています。

  • 高レベルポリシーは低レベルの詳細に依存してはいけない
  • 依存関係は必ず 低レベル → 高レベル に流れるべき
  • 高レベル(Policy) は長期的に不変
  • 低レベル(Details) は技術や環境によって頻繁に変わる
  • レベルを意識して依存方向を設計することで、変更耐性を高められる

実例で見る Policy と Level

例1:ユーザー認証

  • Policy(高レベル)
    「ユーザーはメールアドレスとパスワードで認証する必要がある」
  • Details(低レベル)
    • 認証手段:JWT、OAuth、セッションID
    • データストア:MySQL、PostgreSQL、Firebase

認証方式やDBは変わり得るが、「認証の必要性」というポリシーは変わらない。


例2:ECサイトの注文処理

  • Policy(高レベル)
    「商品を注文すると在庫が減る」
  • Details(低レベル)
    • UIはReactかFlutterか
    • 在庫管理はRDBかNoSQLか

技術選択は将来的に変わるが、注文ルールは長期的に不変。


まとめ

  • ポリシー(Policy) = システムを支配するルール
  • レベル(Level) = 抽象化の高さを示す
  • 高レベル(不変)を低レベル(可変)から守る のがアーキテクチャの役割

良いアーキテクチャとは、変わりやすいもの(技術詳細)から変わりにくいもの(ビジネスルール)を守る設計 です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?