60
ADVANCED APPLICATION ARCHITECTURE I - Layers Matthias Noback @matthiasnoback

Advanced application architecture

Embed Size (px)

Citation preview

Page 1: Advanced application architecture

ADVANCED APPLICATION

ARCHITECTUREI - Layers

Matthias Noback @matthiasnoback

Page 2: Advanced application architecture

matthiasnoback/ layers-ports-and-adapters-

workshopClone from GitHub

docker-compose pull

bin/composer.sh install

docker-compose up -d

Page 3: Advanced application architecture

ARCHITECTUREDecisions about coupling and cohesion

Page 4: Advanced application architecture

COUPLINGHow are things linked to each other?

Page 5: Advanced application architecture

COHESIONWhich things belong together?

Page 6: Advanced application architecture

LAYERED ARCHITECTUREAn answer to both questions

Page 7: Advanced application architecture

LAYERSHelp you protect what's in a deeper layer

Page 8: Advanced application architecture

LAYERSAllow you to define dependency rules

Page 9: Advanced application architecture

LAYERSDefine the right place to put things

Page 10: Advanced application architecture

TRADITIONAL LAYERING

view model

data

Page 11: Advanced application architecture

LAYERSHorizontal division (as opposed to...)

Page 12: Advanced application architecture

USE CASESVertical division

Page 13: Advanced application architecture

LAYERSRendered as circles

Page 14: Advanced application architecture

CLEAN ARCHITECTUREOr "union" architecture

Page 15: Advanced application architecture

COHESIONA basic set of layers

infrastructure application

domain

Page 16: Advanced application architecture

COUPLINGThe dependency rule

Layers should only depend on deeper layers

Page 17: Advanced application architecture

COUPLINGDependency inversion principle

Classes should always depend on things that are more abstract

Page 18: Advanced application architecture

COUPLINGDependency inversion principle

low-levelconcrete class specific

abstract interface generic high-level

Page 19: Advanced application architecture

COUPLINGDependency inversion principle

use

Page 20: Advanced application architecture

COUPLINGDependency inversion principle

use implement

Page 21: Advanced application architecture

COUPLINGIs about dependencies in code

Use Dependency Injection

Page 22: Advanced application architecture

LAYER CONVENTIONSDomain layer

Domain model:

➤ Entities

➤ Value objects

➤ Domain services

➤ Factories

Business logic

Decisions

Data

State

Behavior

Page 23: Advanced application architecture

LAYER CONVENTIONSApplication layer

➤ Find an object

➤ Change something

➤ Notify something

➤ Get some information

Use cases

Orchestration

Page 24: Advanced application architecture

LAYER CONVENTIONSInfrastructure layer

Communication with:

➤ HTTP client

➤ Database

➤ Filesystem

➤ Email server

➤ Message broker

Connecting the application to

the world outside

Page 25: Advanced application architecture

MATTHIASNOBACK/LAYERS-PORTS-AND-ADAPTERS-

WORKSHOPAssignments are on GitHub in assignments/

Page 26: Advanced application architecture

assignment/01.mdLayers

Page 27: Advanced application architecture

ADVANCED APPLICATION

ARCHITECTUREII - Ports & adapters

Page 28: Advanced application architecture

MESSAGING... is the big idea

Page 29: Advanced application architecture

PORTS (COHESION)Web, CLI, test client, messages, database queries

User interface

Persistence

Page 30: Advanced application architecture

PORTS... AND ADAPTERSTranslation

HTTP

SQL

Page 31: Advanced application architecture

HEXAGONAL ARCHITECTURESame thing!

User interface

Persistence

Page 32: Advanced application architecture

PORTS... AND ADAPTERS(De)serialization, translation, structural validation

HTTP

SQL

!

!

Page 33: Advanced application architecture

assignment/02.mdPorts

Page 34: Advanced application architecture

PORT ADAPTERS...in the Infrastructure layer

Page 35: Advanced application architecture

APPLICATION SERVICES... in the Application layer

Page 36: Advanced application architecture

DOMAIN MODELin the Domain layer

Page 37: Advanced application architecture

APPLICATION SERVICESDelivery-mechanism agnostic

Page 38: Advanced application architecture

assignment/03.mdInput adapters

Page 39: Advanced application architecture

VALIDATIONAt different levels

Structural validation of messages

User-friendly input validation

Domain invariant protection

Page 40: Advanced application architecture

assignment/04.mdInput validation

Page 41: Advanced application architecture

APPLICATION SERVICESTransactional consistency

Page 42: Advanced application architecture

assignment/05.mdOutput adapter

Page 43: Advanced application architecture

assignment/06.mdA hidden dependency on the persistence mechanism

Page 44: Advanced application architecture

ADVANTAGES OF USING LAYERS, PORTS & ADAPTERS

Offers insight into the application

Isolates the low-level details

Allows for alternative implementations

Helps with testing

Page 45: Advanced application architecture

ADVANCED APPLICATION

ARCHITECTUREIII - Testing

Page 46: Advanced application architecture

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

INTEGRATION TESTSTesting your adapters

Maybe multiple classes

Including IO

Some setup required

Mocking no dependencies

Page 48: Advanced application architecture

ACCEPTANCE TESTSTesting your application services

Multiple classes

Use cases

Infrastructure stand-ins

Page 49: Advanced application architecture

SYSTEM TESTSTesting your application end-to-end

The real deal

Page 50: Advanced application architecture

TESTING PYRAMIDMake it well-balanced

Unit

Integration

System

Acceptance

Page 51: Advanced application architecture

assignment/07.mdDifferent types of tests

Page 52: Advanced application architecture

ACCEPTANCE TESTSUse infrastructure stand-ins

Acceptance testtest the

application layer

Page 53: Advanced application architecture

Persistence

FileBased InMemory

Port

Adapters

Page 54: Advanced application architecture

MeetupRepository

FileBasedMeetupRepository InMemoryMeetupRepository

Domain

Infrastructure

implements implements

Page 55: Advanced application architecture

assignment/08.mdA test double for the Persistence port

Page 56: Advanced application architecture

assignment/09.md An acceptance test for the application layer

Page 57: Advanced application architecture

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

Page 58: Advanced application architecture

assignment/10.mdNotifications

Page 59: Advanced application architecture

https://training.matthiasnoback.nl/

Page 60: Advanced application architecture

https://joind.in/talk/b1763

Feedback?