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?

パッケージに関する原則_ちょうぜつソフトフェア設計入門を読んで

0
Last updated at Posted at 2025-08-10

REP — Reuse-Release Equivalence Principle(再利用・リリース等価の原則)

  • 再利用の最小単位=リリース単位(=パッケージ)。バージョン管理で配布できる単位にまとめる。(A Memorandum)
  • 書籍の正誤表でも用語表記が補足されています(Equivalence の綴りなど)。(gihyo.jp)
    実務ヒント:社内ライブラリは「タグを切れる塊」で配る。README・CHANGELOG・セマンティックバージョニング必須。

CRP — Common Reuse Principle(共通再利用の原則)

  • 一緒に再利用されるものだけを同じパッケージへ。使わない依存を抱え込まない。(blog.avenuecode.com, Zenn)
    実務ヒント:UIコンポーネントとHTTPクライアントを同梱しない。利用側に“要らない副作用”を持ち込まない。

CCP — Common Closure Principle(共通閉鎖の原則)

  • 同じ変更理由で変わるものは同じパッケージに入れて、影響範囲を局所化する。(A Memorandum, Zenn)
    実務ヒント:「請求書の仕様変更」は“請求”パッケージだけの差し替えで済む構造を目指す。

ADP — Acyclic Dependencies Principle(非環式依存の原則)

  • 循環依存は禁止。循環があると単独リリースやテストができない。(A Memorandum)
  • 断ち切り方:新パッケージ抽出/DIP・ISPで依存反転。(Academia)
    実務ヒント:依存グラフをCIで可視化してサイクル検知を落とす。

SDP — Stable Dependencies Principle(安定依存の原則)

  • 依存は“より安定な方向”へ(多くに依存され・自分はあまり依存しない側)。(A Memorandum)
  • 安定度の指標に Fan-in/Fan-out を用いる考え方も有効。(takatechskill.com)
    実務ヒント:ドメインの核(抽象)は外縁(UI/Infra)に依存しない。外縁→内側へ一方向。

SAP — Stable Abstractions Principle(安定抽象の原則)

  • 安定なパッケージほど抽象的に。不安定なパッケージは具象でOK。(A Memorandum)
  • 「安定=変更しづらい」を抽象で拡張可能に保つ。(Qiita, takatechskill.com)
    実務ヒント:安定側に抽象(インターフェース)を置き、実装は不安定側へ追い出す。

SOLID 原則(5)

SRP — Single Responsibility Principle(単一責任の原則)

  • モジュールは**ひとつの“変更理由(アクター)”**だけに責任を持つ。(ogis-ri.co.jp, Zenn)
    実務ヒント:保存・集計・通知を1クラスに詰めない。責務でクラス分割。

OCP — Open-Closed Principle(開放閉鎖の原則)

  • 拡張に開き、修正に閉じる。抽象化+ポリモーフィズムで差し替え可能に。(Zenn)
    実務ヒント:戦略パターン/プラグイン・DIで“追加”対応。既存コードに手を入れない。

LSP — Liskov Substitution Principle(リスコフの置換原則)

  • 上位型を下位型で置き換えても振る舞いが保たれること。事前条件≦・事後条件≧・不変維持など。(Qiita)
    実務ヒント:サブクラスで例外を増やさない・契約を弱めない。テストは“親の仕様”で通す。

ISP — Interface Segregation Principle(インターフェース分離の原則)

  • クライアントごとに小さく目的特化したインターフェースへ分割。不要メソッドを強要しない。(Qiita, Zenn)
    実務ヒント:“でかいサービスIF”を用途別ポートに分割。UIとバッチで別IF。

DIP — Dependency Inversion Principle(依存性逆転の原則)

  • 上位も下位も「抽象」に依存し、詳細(実装)が抽象に従属する。(ウィキペディア, Zenn)
    実務ヒント:ドメイン→リポジトリIF、アダプタ側で実装。フレームワーク依存は外側に隔離。

まとめ(運用チートシート)

  • パッケージは“変更理由”と“再利用単位”で切る(CCP×CRP×REP)。循環はゼロ(ADP)。(A Memorandum, blog.avenuecode.com)
  • 依存は安定かつ抽象へ(SDP×SAP)。抽象は内側、実装は外側。(A Memorandum)
  • SOLIDでクラス設計を固め、パッケージ原則で“差し替え・再配布・影響局所化”を実現。

参考(抜粋)

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?