Software Development, Pragmatic Programming, Software, Software Engineering, Dry.
components into layers because each layer uses only the abstractions provided by the layers below it. There is an easy test for the orthogonal design. Once you have your components mapped out, ask yourself: If I dramatically change the requirements behind a particular function, how many modules are