- They help to create flexible designs that are maintainable and can cope with change.
- They provide vocabulary to communicate with other developers.
- They enable to stay at the "design level" a bit longer, analyze the abstraction before getting down to implementation.
- They widen the variety of solutions to problems in mind.
- They are more than only OO design principles - they are (sometimes non-obvious) ways of constructing object-oriented systems, that otherwise would be achieved by hard, iterative work.
- S.O.L.I.D
- Writing clean code
- Very good material on abstraction, encapsulation and information hiding (external link)
- Overall notes on architecture
- Notes from Coursera OOP Course Module 2
- refactoring.guru, a wonderful page with DPs
- Design Patterns: Elements of Reusable Object-Oriented Software - the famous GoF book
- Heads first design patterns - many recommend this book, I find it hard to work with
- Object oriented sofware construction
- "How to design a good API and why it matters" talk from Joshua Bloch
- The Lost Art of Software Design (mostly about upfront design, highly recommend)
- Clean Architecture: A Craftsman's Guide to Software Structure and Design - excellent chapter about SOLID
- Patterns of Enterprise Application Architecture
- Just Enough Software Architecture: A Risk-Driven Approach
- https://web.archive.org/web/20071014213629fw_/http://www.itmweb.com/essay551.htm
- https://web.archive.org/web/20071015034017fw_/http://www.itmweb.com/essay552.htm
- https://web.archive.org/web/20071014213642fw_/http://www.itmweb.com/essay553.htm
- https://web.archive.org/web/20071013175404fw_/http://www.itmweb.com:80/essay554.htm
- https://web.archive.org/web/20071012202539fw_/http://www.itmweb.com:80/essay555.htm