Layered Architecture

This concept is related to separation of concerns.

Conceptually libraries should be layered with the lowest level dependencies in the core libraries.