I am a huge fan of software design principles such as SOLID and DRY. What other principles exist for OO software design?
Note. I’m
When your API are expected to grow, use Abstract class instead of Interface. Adding a new method in Interface requires to change ALL the classes which implement it.