- Entities
- Use-cases
- Controllers/Gateways/Presenters
- Frameworks and drivers
- Single Responsibility
- Open/closed Principle
Open for extension/closed for modification - Liskov substitution Principle
TBD - Type inheritance systems
e.g. Square cannot inherit a rectangle
Another classic goes, "Looks like a duck, quacks like a duck, but needs batteries, is probably not a duck" - Interface Segregation
No client should be forced to depend on methods it does not use. - Dependency Inversion
high level modules should not depend on low level modules; both should depend on abstractions. Abstractions should not depend on details. Details should depend upon abstractions.