Use for questions about or related to the design of packages (groupings) of units of code (e.g. classes), as opposed to the design of the units of code themselves or design patterns.
Many programming languages have one or more ways of grouping code, for example Java's packages and jars. A concern in program design is how to choose the groups.
Robert C. Martin defined six principles of package design, which include
- principles of package cohesion
- REP - The Release Reuse Equivalency Principle
- CCP - The Common Closure Principle
- CRP - The Common Reuse Principle
- principles of package coupling
- ADP - The Acyclic Dependencies Principle
- SDP - The Stable Dependencies Principle
- SAP - The Stable Abstractions Principle
jdepend is a tool that evaluates Java programs against the above principles.
John Lakos's "Large Scale C++ Software Design" discusses how to manage dependencies in large C++ programs.
References