Entropic Thoughts
16 hours ago
- Abstractions must be carefully designed, anticipating all purposes while forgetting none, as per Richard Gabriel's quote.
- MVC and similar layered architectures separate by technical boundaries (e.g., presentation, business, persistence) rather than logical concerns, leading to integration of concerns.
- Proper separation of concerns ensures that changes to requirements have a small blast radius; features in MVC affect all layers.
- David Parnas' insight: business domain concepts change less than technical concepts, so modules should align with business fundamentals.
- Extension and contraction (adding/removing features) is easier when modules are drawn along business domain boundaries, not technical layers.
- An 'onion architecture' or inside-out design with stable core business fundamentals at lower layers reduces the need to 'move quickly across layers'.
- Each layer should act as a virtual machine for the layer above, with stable definitions at bottom, as suggested by Dijkstra.
- Locality of behaviour and onion architecture promote good modularity, contrasting with MVC's 50-year-old but still prevalent approach.