Completed
Introduction
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