Completed
Our architecture diagrams don't match the code.
Class Central Classrooms beta
YouTube videos curated by Class Central.
Classroom Contents
Modular Monoliths
Automatically move to the next video in the Classroom when playback concludes
- 1 Introduction
- 2 A well structured codebase is easy to visualise
- 3 the component exists conceptually
- 4 Abstractions should reflect the code
- 5 Our architecture diagrams don't match the code.
- 6 The code structure should reflect the architectural intent
- 7 Organise code based upon what the code does from a technical perspective
- 8 Package by layer is a "horizontal" slicing
- 9 Relaxed vs strict layering
- 10 Changes to a layered architecture usually result in changes across all layers
- 11 Organise code based upon what the code does from a functional perspective
- 12 Package by feature is a "vertical" slicing
- 13 Cited benefits include higher cohesion, lower coupling, and related code is easier to find
- 14 The "inside" is technology agnostic, and is often described in terms of a ubiquitous language
- 15 Architectural principles introduce consistency via constraints and guidelines
- 16 web controllers should never access repositories directly
- 17 Tooling? Static analysis tools, architecture violation checking, etc
- 18 types in package **/web should not access types in **/data
- 19 Using tools to assert good code structure seems like a hack
- 20 But Java's access modifiers are flawed...
- 21 Component? a grouping of related functionality behind a nice clean interface, which resides inside an execution environment like an application
- 22 Package by component is about applying component-based or service-oriented design thinking to a monolithic codebase
- 23 Modularity as a principle
- 24 Separating interface from implementation
- 25 Impermeable boundaries
- 26 The devil is in the implementation details
- 27 Organisation vs encapsulation
- 28 Use encapsulation to minimise the number of potential dependencies
- 29 If you're building a monolithic application with a single codebase, try to use the compiler to enforce boundaries
- 30 Or other decoupling modes such as a module framework that differentiates public from published types
- 31 Agility is a quality attribute
- 32 A good architecture enables agility
- 33 Whatever architectural approach you choose, don't forget about the implementation details
- 34 Beware of the model-code gap