Controller
Assign system event handling to a non-UI class that mediates between UI and domain logic
Assign system event handling to a non-UI class that mediates between UI and domain logic
Assign object creation responsibility to the class best suited to create instances
Keep class responsibilities focused and strongly related to its purpose
Assign responsibility to an intermediate object that mediates between other objects
Assign responsibility to the class that has the information needed to fulfill it
Minimize dependencies between classes to improve flexibility, testability, and maintainability
Handle object type variations through polymorphic types rather than conditional logic
Protect classes from variations in other classes using abstraction and stable interfaces
Create artificial classes to represent operations when assigning to domain objects would violate other principles