Excellent book every Software Developer should read and learn!
What is Software Architecture? What is GOOD software architecture? Key principles and how to implement them. What should NOT be considered as part of the architecture, and what decisions should be postponed as much as possible?
I prepared a series of mind maps dedicated to “Clean Architecture” book by Uncle Bob (Robert Martin):
Fifth part of the book contains A LOT of useful information:
What is software architecture? What type of interdependencies can exist? How to draw borderlines between components? What type of borders exist? How to distribute policies by the levels? What are business rules, entities and use cases? What architecture can and should “scream”? Description of Clean Architecture.
Fourth part of the book is about principles of combining components into software systems.
This part is more interesting. It contains:
Overview of components history: Relocatability, Linkers
Three principles of Component Cohesion
REP: The Reuse/Release Equivalence Principle
CCP: The Common Closure Principle
CRP: The Common Reuse Principle
Three principles of Components Coupling
ADP: The Acyclic Dependencies Principle
SDP: The Stable Dependencies Principle
SAP: The Stable Abstractions Principle
I especially enjoyed this chapter because of presented metrics that could be used to measure(!) good software design (more precisely, how do you follow some design principles)
Single Responsibility Principle: A module should be responsible to one, and only one, actor.
Open-Closed Principle: A software artifact should be open for extension but closed for modification
Liskov Substitution Principle: S is a subtype of T if instead of instance of T we can always use an instance of S
Interface Segregation Principle: use interfaces to reduce dependency upon changes
Dependency Inversion Principle: avoid dependencies on volatile concrete elements
I didn’t learn anything new from here (but I am in software engineering for 20+ years already ;). However, this is still a good summarization of key design principles. And it’s worth to remember about them.