Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Whoops! Where did my architecture go?
Search
Oliver Drotbohm
October 13, 2016
Programming
2
760
Whoops! Where did my architecture go?
Slides of the talk I gave at GOTO London, 2016.
Oliver Drotbohm
October 13, 2016
Tweet
Share
More Decks by Oliver Drotbohm
See All by Oliver Drotbohm
Spring Modulith – A Deep Dive
olivergierke
7
1.8k
Spring for the Architecturally Curious Developer
olivergierke
5
1.6k
Spring Boot 3 & Spring Framework 6
olivergierke
4
1.8k
Architecturally-evident Java Applications with jMolecules
olivergierke
8
2.4k
A Deep Dive into Spring Application Events
olivergierke
12
2.9k
Building Better Monoliths – Modulithic Applications with Spring Boot
olivergierke
4
820
Spring HATEOAS – Hypermedia APIs with Spring
olivergierke
1
560
Building Better Monoliths – Modulithic Applications with Spring Boot
olivergierke
6
3.8k
REST Beyond the Obvious – API Design for Ever Evolving Systems
olivergierke
5
1.1k
Other Decks in Programming
See All in Programming
Rubyでたのしむクリエイティブコーディング/Enjoy Creative coding with Ruby
chobishiba
1
210
スキーマ駆動開発による品質とスピードの両立 - 私達は何故、スキーマを書くのか
kentaroutakeda
0
170
Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets
hollycummins
0
230
Ruby GitHub Packages
bkuhlmann
0
630
What We Can Learn From OSS
inouehi
0
420
冗長なエラーログを削減し、スタックトレースを手に入れる / Reducing Verbose Error Logs and Obtaining Stack Traces
upamune
0
860
GitHub Copilotのススメ
marcy731
1
200
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
470
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
27
8.3k
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
390
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
140
使ってみよう Azure AI Document Intelligence
kosmosebi
2
330
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
Debugging Ruby Performance
tmm1
70
11k
Automating Front-end Workflow
addyosmani
1356
200k
Building a Modern Day E-commerce SEO Strategy
aleyda
17
6.4k
Typedesign – Prime Four
hannesfritz
36
2.1k
Building Applications with DynamoDB
mza
88
5.6k
Facilitating Awesome Meetings
lara
42
5.6k
Code Reviewing Like a Champion
maltzj
514
39k
Thoughts on Productivity
jonyablonski
58
3.8k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
6
1.5k
Transcript
Whoops! Where did my architecture go? In between a monolith
and a system of systems mess… / @olivergierke
None
None
Background Consulting & engineering @ Pivotal Lots of code reviews
Eoin Woods‘ talk on InfoQ
Roadmap Divide and conquer Of layers and slices The modular
monolith
Divide and conquer
Component Single unit to understand
Component Single unit to change
Component Scope of risk of change
B Smaller unit to understand A
B Reduced risk of change A
B Cost of separation A
B Definition and maintenance of dependencies A
Of layers and slices…
Presentation Service Data Access Billing Inventory Order
Layers Well understood Known to developers Less important to business
Slices Hardly understood New to developers Key for business requirements
Presentation Service Data Access Billing Inventory Order
Monolith VS. System of Systems
Monolith VS. System of Systems Order Inventory Billing Order Inventory
Billing
In-process calls VS. Inter-process calls Order Inventory Billing Order Inventory
Billing
Performance? Overhead? Error scenarios? Order Inventory Billing Order Inventory Billing
" If you can’t build a modular monolith, why do
you think microservices are the answer? — Simon Brown
How to manage modularity in different architectural contexts?
Means to enforce context boundaries? Order Inventory Billing Order Inventory
Billing
The modular monolith
How to implement a modular monolith?
How to maintain a modular monolith?
Bounded Context all the things! Domain-Driven Design is a great
idea! Surprise! In a monolith, too!
Architecturally- evident code
Code analysis jDepend Sonarcube Structure 101 / Sonargraph jQAssistant
A plain Java based approach
How to write code that’s less likely to deteoriate?
Presentation Service Data Access Billing Inventory Orders
Packages
….layer.slice ….slice.layer ….slice
….web.core ….service.core ….repository.core
….core.web ….core.service ….core.repository
….core ….customer ….account
Does it make a difference?
Dependency management
Orders Inventory Billing Orders Inventory Billing
A rule violation is just an @Inject away! Orders Inventory
Billing
You only need to manage what you can refer to…
Layers first Leaks slice internals Lower layers visible to everyone
Needs to be public :( Allows other code to circumvent
business logic
Slices only Keeps technical division private Encapsulates business module Internals
understood anyway
All package protected Compiler induced dependency control
Presentation Service Data Access Billing Inventory Order
Presentation Service Data Access Billing Inventory Order
Resources Blogpost Sonargraph jQAssistant Spring Data JPA @ GitHub
Sample Code http://github.com/olivergierke/ whoops-architecture
Thanks & Credits Eoin Woods — Talk @ InfoQ Stefan
Tilkov — Talk @ InfoQ