Common Reuse Principle

No Change
adopt
First Added:June 24, 2026 Updated: July 2, 2026

Common Reuse Principle is a technique we adopt in the garden.

Summary

When to use: Evaluate on a project when the capability clearly fits the requirement.

When to skip: When a simpler alternative already covers the need.

Details

Component Cohesion Context

CRP is one of three classic component cohesion principles (Robert C. Martin). Siblings are Reuse-Release Equivalence Principle (REP) and Common Closure Principle (CCP).

PrincipleGist
REPRelease components as a unit when reused (Reuse-Release Equivalence Principle)
CCPGroup classes that change together (Common Closure Principle)
CRPGroup classes reused together

Martin notes you cannot maximize all three at once. Tight CRP favors smaller, use-aligned bundles. Tight CCP favors independent release by change axis. Pick the pain you are solving.

ISP at Component Level

LevelPrincipleRule
Type / interfaceInterface Segregation PrincipleDo not depend on methods you do not use
Package / moduleCRPDo not depend on classes you do not use

Practical Signs

SignalLikely fix
Consumer imports one helper from a large common packageSplit by client use case (CRP)
Dependency graph shows disjoint class clusters in one moduleExtract sub-packages
Security or license review flags unused transitive depsPeel unused classes into separate artifacts
Every consumer rebuilds when one rarely used class changesConsider Common Closure Principle split instead

Common Failure Modes

  • Kitchen-sink utils or common packages everyone depends on
  • Bundling unrelated DTOs because they share a folder
  • Splitting so fine that consumers juggle dozens of tiny modules
  • Optimizing CRP while ignoring divergent change rates (CCP conflict)

Related Garden Items