Components of the application should be isolated, separated, and layered to promote a loosely coupled architecture.
Principals of separation of concern and single responsibility should be followed.
Separation of Concerns is a design principle for separating a software application into distinct sections/components, so that each section addresses a separate concern.
Single Responsibility states that “a class should have one, and only one, reason to change”.
Classes should be written to be small, well-factored, and easily tested.