~/talk

Modular Monoliths

Talkat GOTO Berlin 2018 · 2018-10-31..11-02· [software-architecture]
slides:none on file

Argues that you can get microservice-like modularity inside a single Java monolith by aligning architecture diagrams with code, using the C4/Structureizr approach and dogfooding it on Cloud Foundry + Spring. Demonstrates package by component with package-protected implementations, recommends enforcing boundaries via the compiler, Java 9 modules or multiple Maven modules, and automating checks with fitness functions and tools like JQAssistant and ArchUnit. Warns that microservices are often chosen for fashion, not need.

AI-written summary · about

  1. 0:00Introduction
  2. 2:35A well structured codebase is easy to visualise
  3. 4:43the component exists conceptually
  4. 4:57Abstractions should reflect the code
  5. 7:17Our architecture diagrams don't match the code.
  6. 7:56The code structure should reflect the architectural intent
  7. 8:33Organise code based upon what the code does from a technical perspective
  8. 9:11Relaxed vs strict layering
  9. 11:53Changes to a layered architecture usually result in changes across all layers
  10. 12:42Organise code based upon what the code does from a functional perspective
  11. 12:56Package by feature is a "vertical" slicing
  12. 13:31Cited benefits include higher cohesion, lower coupling, and related code is easier to find
  13. 15:04The "inside" is technology agnostic, and is often described in terms of a ubiquitous language
  14. 20:09Architectural principles introduce consistency via constraints and guidelines
  15. 20:27web controllers should never access repositories directly
  16. 22:51Tooling? Static analysis tools, architecture violation checking, etc
  17. 23:18types in package **/web should not access types in **/data
  18. 23:55Using tools to assert good code structure seems like a hack
  19. 24:38But Java's access modifiers are flawed...
  20. 25:50Component? a grouping of related functionality behind a nice clean interface, which resides inside an execution environment like an application
  21. 27:08Package by component is about applying component-based or service-oriented design thinking to a monolithic codebase
  22. 27:28Modularity as a principle
  23. 27:54Separating interface from implementation
  24. 28:12Impermeable boundaries
  25. 29:21The devil is in the implementation details
  26. 30:15Organisation vs encapsulation
  27. 34:49Use encapsulation to minimise the number of potential dependencies
  28. 35:38If you're building a monolithic application with a single codebase, try to use the compiler to enforce boundaries
  29. 36:01Or other decoupling modes such as a module framework that differentiates public from published types
  30. 39:08Agility is a quality attribute
  31. 39:45A good architecture enables agility
  32. 45:58Whatever architectural approach you choose, don't forget about the implementation details
  33. 46:13Beware of the model-code gap
~/search
type to search 6,249 conferences, 138,987 speakers and 185,172 talks
~/help
cmdctrl k
search every conference, speaker and series
/
focus the filter search
h
home
c
conferences
s
speakers
e
series
t
light / dark — the status bar button does the same
?
this help
esc
close this, then clear every filter — or just the search, while you are typing in it

Ignored while you are typing. Pages without a filter rail have no search to focus.