advanced application architecture (workshop slides)
TRANSCRIPT
![Page 1: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/1.jpg)
ADVANCED APPLICATION
ARCHITECTUREI - Layers
Matthias Noback @matthiasnoback
![Page 2: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/2.jpg)
matthiasnoback/layers-ports-and-adapters-
workshopClone from GitHub
Follow the instructions in README.md
![Page 3: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/3.jpg)
ARCHITECTUREDecisions about coupling and cohesion
![Page 4: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/4.jpg)
COUPLINGHow are things linked to each other?
![Page 5: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/5.jpg)
COHESIONWhich things belong together?
![Page 6: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/6.jpg)
COHESIONWhich things belong together?
www.youtube.com/watch?v=N_7DPyxzUzc
![Page 7: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/7.jpg)
LAYERED ARCHITECTUREAn answer to both questions
![Page 8: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/8.jpg)
LAYERSHelp you protect what's in a deeper layer
![Page 9: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/9.jpg)
LAYERSAllow you to define dependency rules
![Page 10: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/10.jpg)
LAYERSDefine the right place to put things
![Page 11: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/11.jpg)
TRADITIONAL LAYERING
view model
data
![Page 12: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/12.jpg)
LAYERSHorizontal division (as opposed to...)
![Page 13: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/13.jpg)
USE CASESVertical division
![Page 14: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/14.jpg)
LAYERSRendered as circles
![Page 15: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/15.jpg)
CLEAN ARCHITECTUREOr "union" architecture
![Page 16: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/16.jpg)
COHESIONA basic set of layers
domain application
infrastructure
![Page 17: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/17.jpg)
COUPLINGThe dependency rule
Layers should only depend on deeper layers
![Page 18: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/18.jpg)
COUPLINGDependency inversion principle
Classes should always depend on things that are more abstract
![Page 19: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/19.jpg)
COUPLINGDependency inversion principle
low-levelconcrete class specific
abstract interface generic high-level
![Page 20: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/20.jpg)
COUPLINGDependency inversion principle
use
![Page 21: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/21.jpg)
COUPLINGDependency inversion principle
use implement
![Page 22: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/22.jpg)
COUPLINGIs about dependencies in code
Use Dependency Injection
![Page 23: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/23.jpg)
LAYER CONVENTIONSDomain layer
Domain model:
➤ Entities
➤ Value objects
➤ Domain services
➤ Factories
Business logic
Decisions
Data
State
Behavior
![Page 24: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/24.jpg)
LAYER CONVENTIONSApplication layer
➤ Find an object
➤ Change something
➤ Notify something
➤ Get some information
Use cases
Orchestration
![Page 25: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/25.jpg)
LAYER CONVENTIONSInfrastructure layer
Communication with:
➤ HTTP client
➤ Database
➤ Filesystem
➤ Email server
➤ Message broker
Connecting the application to
the world outside
![Page 26: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/26.jpg)
assignment/01.mdLayers
![Page 27: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/27.jpg)
ADVANCED APPLICATION
ARCHITECTUREII - Ports & adapters
![Page 28: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/28.jpg)
MESSAGING... is the big idea
![Page 29: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/29.jpg)
PORTS (COHESION)Web, CLI, test client, messages, database queries
Web
Database
![Page 30: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/30.jpg)
PORTS... AND ADAPTERSTranslation
HTTP
SQL
![Page 31: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/31.jpg)
HEXAGONAL ARCHITECTURESame thing!
Web
Persistence
![Page 32: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/32.jpg)
PORTS... AND ADAPTERS(De)serialization, translation, structural validation
HTTP
SQL
!
!
![Page 33: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/33.jpg)
assignment/02.mdPorts
![Page 34: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/34.jpg)
PORT ADAPTERS...in the Infrastructure layer
![Page 35: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/35.jpg)
APPLICATION SERVICES... in the Application layer
![Page 36: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/36.jpg)
DOMAIN MODELin the Domain layer
![Page 37: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/37.jpg)
APPLICATION SERVICESDelivery-mechanism agnostic
![Page 38: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/38.jpg)
assignment/03.mdInput adapters
![Page 39: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/39.jpg)
VALIDATIONAt different levels
Structural validation of messages
User-friendly input validation
Domain invariant protection
![Page 40: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/40.jpg)
assignment/04.mdInput validation
![Page 41: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/41.jpg)
APPLICATION SERVICESTransactional consistency
![Page 42: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/42.jpg)
assignment/05.mdOutput adapter
![Page 43: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/43.jpg)
assignment/06.mdA hidden dependency on the persistence mechanism
![Page 44: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/44.jpg)
ADVANTAGES OF PORTS & ADAPTERS
Offers insight into the application
Isolates the low-level details
Allows for alternative implementations
Helps with testing
![Page 45: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/45.jpg)
ADVANCED APPLICATION
ARCHITECTUREIII - Testing
![Page 46: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/46.jpg)
UNIT TESTSTesting your units of code
One class at a time
No IO
No setup required
Mocking only dependencies "you own"
![Page 47: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/47.jpg)
INTEGRATION TESTSTesting your adapters
Maybe multiple classes
Including IO
Some setup required
Mocking no dependencies
![Page 48: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/48.jpg)
ACCEPTANCE TESTSTesting your application services
Multiple classes
Use cases
Infrastructure stand-ins
![Page 49: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/49.jpg)
SYSTEM TESTSTesting your application end-to-end
The real deal
![Page 50: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/50.jpg)
TESTING PYRAMIDMake it well-balanced
Unit tests
Integration tests
System tests
![Page 51: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/51.jpg)
assignment/07.mdDifferent types of tests
![Page 52: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/52.jpg)
assignment/08.mdA test double for the Persistence port
![Page 53: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/53.jpg)
assignment/09.md An acceptance test for the application layer
![Page 54: Advanced Application Architecture (workshop slides)](https://reader031.vdocuments.us/reader031/viewer/2022021920/58e4db1c1a28abf5048b5f63/html5/thumbnails/54.jpg)
A WELL-BALANCED TEST SUITE
Adapters can be easily replaced
Test suite is fast
Feedback is quick
Small amount of fragile tests
Enables continuous delivery