designing a serverless application with domain driven designdesigning a serverless application with...

55
Designing a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr

Upload: others

Post on 30-Dec-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Designing a Serverless Application with Domain Driven Design

Susanne KaiserIndependent Tech Consultant

@suksr

Page 2: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

$2,840,000,000,000TWOTRILLIONEIGHTHUNDREDFOURTYBILLION USD

Costs of Poor Software Quality in the US in 2018 (by CISQ report )

Source: https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report @suksr

Page 3: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Some Indicators for Poor Software Quality (extracted from CISQ report )

t

Defe

cts

0%

Increasing defect trend

Low test coverage

Cyclomatic complexity

Large inheritance depthHigh amount of effort to understand piece of code

Badly engineered software

Lack of domain knowledge

Based on: https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report

Communication and coordination breakdowns in (large) teams

High degree of class coupling

@suksr

Page 4: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Domain Driven Design (DDD)

Business Domain Needs Strategy

Software Design

@suksr

Page 5: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Domain Driven Design (DDD) – TerminologyStrategic DesignTactical Design

Bounded ContextUbiquitous Language

Core SubdomainSupporting SubdomainGeneric Subdomain

Problem SpaceSolution Space

Context MapsAnti-Corruption LayerShared KernelOpen Host ServiceSeparate WaysPartnershipCustomer-SupplierConformist

Domain ModelEntity Value ObjectAggregateRepositoryFactoryApplication ServiceDomain ServiceDomain Event

@suksr

Page 6: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

DDD & Wardley Maps

Valu

e Ch

ainIn

visib

leVi

sible

Evolution

Genesis Custom-Built Product (+rental) Commodity (+utility)

Posit

ion

Movement

Uncharted Industrialised

@suksr

Page 7: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Evolution

Visualisation of a value chain’s evolution

Genesis Custom-Built Product (+rental) Commodity (+utility)

Posit

ion

Movement

Wardley Maps BY SIMON WARDLEY

Uncharted Industrialised

@suksr

Page 8: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Wardley Maps – VALUE CHAIN

Who are your users?

Valu

e Ch

ainIn

visib

leVi

sible

@suksr

Page 9: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Wardley Maps – VALUE CHAIN

Who are your users?

What are your users’ needs?

Valu

e Ch

ainIn

visib

leVi

sible

@suksr

Page 10: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Wardley Maps – VALUE CHAIN

Who are your users?

What are your users’ needs?

What are the components/activities to fulfill your users’ needs incl. dependencies?

Valu

e Ch

ainIn

visib

leVi

sible

Posit

ion

@suksr

Page 11: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Wardley Maps – LANDSCAPE

Valu

e Ch

ainIn

visib

leVi

sible

Evolution

Components alongevolution axes

Genesis Custom-Built Product (+rental) Commodity (+utility)

Posit

ion

Movement

@suksr

Page 12: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Everything evolves

Past Current Future

Supply CompetitionDemand Competition

Uncharted Industrialised

Wardley Maps – PATTERNS

Movement

@suksr

Page 13: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Past Current Future

Characteristics changeUncharted

Undefined marketUncertain

UnpredictableRare

Poorly understood

Forming marketLearning on use

Increasing understandingSlowly increasing

consumptionRapid increases in

learning

Growing marketLearning on operationIncreasing educationRapidly increasing

consumptionRapid increase in use

Mature marketKnown / accepted

StableWidespread and stabilising

Commonly understood(in term of use)

Industrialised

Wardley Maps – PATTERNS

Movement

@suksr

Page 14: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Wardley Maps – PRINCIPLES

Use appropriate methodsper evolution stage

Build in-houseUse/buy off-the-shelf product

Outsource to utility suppliers

@suksr

Page 15: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Use appropriate methodsper evolution stage

Wardley Maps – PRINCIPLES Build in-houseUse/buy off-the-shelf product

Outsource to utility suppliers

@suksr

Page 16: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Use appropriate methodsper evolution stage

Wardley Maps – PRINCIPLES Build in-house Use/buy off-the-shelf product

Outsource to utility suppliers

@suksr

Page 17: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Know your users &focus on user needs

Wardley Maps – PRINCIPLES Build in-house / AgileUse/buy off-the-shelf product / Lean

Outsource to utility suppliers / Six Sigma

@suksr

Page 18: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Domain Driven Design

Ubiquitous Language

Domain Knowledge

Understanding the problem domain firstbefore solving it

Problem Domain

Domain Experts

Development Teams

Collaboration

@suksr

Page 19: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

DDD & Wardley Maps Problem Domain

Strategic Design

DDD Patterns & Practices

Tactical Design

@suksr

Stra

tegi

c Des

ign

Tact

ical D

esig

n

Page 20: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

DDD & Wardley Maps Problem Domain

Strategic Design

DDD Patterns & Practices

Tactical Design

Analysing the business domain

Discovering Subdomains

Problem Space

@suksr

Prob

lem

Spa

ceSt

rate

gic D

esig

nTa

ctica

l Des

ign

Analy

se &

Disc

over

Page 21: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

DDD & Wardley Maps Problem Domain

Strategic Design

DDD Patterns & Practices

Tactical Design

Analysing the business domain

Discovering Subdomains

Problem Space

Decomposing into modular components (Bounded Contexts (BC))

Mapping interaction patterns between BC (Context Maps)

Solution Space

@suksr

Prob

lem

Spa

ceSo

lutio

n Sp

ace

Stra

tegi

c Des

ign

Tact

ical D

esig

n

Analy

se &

Disc

over

Deco

mpo

se &

Map High-Level

Design Decisions

Page 22: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

DDD & Wardley Maps Problem Domain

Strategic Design

DDD Patterns & Practices

Tactical Design

Architecting a solution fitting the problem domain as closely as possible

Provides building blocks to implement domain model

Analysing the business domain

Discovering Subdomains

Problem Space

Decomposing into modular components (Bounded Contexts (BC)

Mapping interaction patterns between BC (Context Maps)

Solution Space

@suksr

Solution Space

Prob

lem

Spa

ceSo

lutio

n Sp

ace

Stra

tegi

c Des

ign

Tact

ical D

esig

n

Analy

se &

Disc

over

Arch

itect

&

Impl

emen

t

High-Level Design Decisions

Low-Level Design Decisions

Deco

mpo

se &

Map

Page 23: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Analy

se &

Disc

over

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Distilling the problemdomain & discovering the

core subdomain

DDD & Wardley Maps

Core Subdomain

Problem DomainSTRATEGIC DESIGN (PROBLEM SPACE)

Supporting Subdomain

Generic Subdomain

@suksr

Prob

lem

Spa

ceSt

rate

gic D

esig

n

Page 24: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Distilling the problemdomain & discovering the

core subdomain

DDD & Wardley Maps

Core Subdomain

Problem Domain

Competitive advantage ComplexChanges oftenBuild in-house

STRATEGIC DESIGN (PROBLEM SPACE) Supporting Subdomain

Generic Subdomain

@suksr

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

n

Build in-houseUse/buy off-the-shelf product

Outsource to utility suppliers

Page 25: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Distilling the problemdomain & discovering the

core subdomain

DDD & Wardley Maps

Core Subdomain

Problem Domain

Competitive advantage ComplexChanges oftenBuild in-house

No competitive advantage Quite simpleDoes not change oftenPrefer to buy/use off-the-shelf

STRATEGIC DESIGN (PROBLEM SPACE) Supporting Subdomain

Generic Subdomain

@suksr

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

n

Build in-houseUse/buy off-the-shelf product

Outsource to utility suppliers

Page 26: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Distilling the problemdomain & discovering the

core subdomain

DDD & Wardley Maps

Core Subdomain

Problem Domain

Competitive advantage ComplexChanges oftenBuild in-house

No competitive advantage Quite simpleDoes not change oftenPrefer to buy/use off-the-shelf

No competitive advantage Generally complexDoes not change oftenBuy/use off-the-shelf / outsource

STRATEGIC DESIGN (PROBLEM SPACE) Supporting Subdomain

Generic Subdomain

@suksr

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

n

Build in-houseUse/buy off-the-shelf product

Outsource to utility suppliers

Page 27: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Deco

mpo

se &

Map

Analy

se &

Disc

over

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Model Driven DesignDDD & Wardley MapsSTRATEGIC DESIGN (SOLUTION SPACE)

Development Teams

Domain Experts

Ubiquitous Language

Analysis Model

Code Model

Domain Model

Core Subdomain

Supporting Subdomain

Generic Subdomain

Problem Domain

abstracted by

@suksr

Prob

lem

Spa

ceSo

lutio

n Sp

ace

Stra

tegi

c Des

ign

Page 28: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Bounded ContextsDDD & Wardley MapsSTRATEGIC DESIGN (SOLUTION SPACE)

Core Subdomain

Supporting Subdomain

Generic Subdomain

Problem Domain

Linguistic/semantic boundary

Ownership boundary

Model integrity boundary

Physical boundary

Different architectural patterns per context possible

@suksr

Microservice candidates

Deco

mpo

se &

Map

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

nSo

lutio

n Sp

ace

Page 29: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Know your users &focus on user needs

Submit Session

DDD & Wardley MapsSTRATEGIC DESIGN (PROBLEM SPACE)

Speaker

@suksr

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

n

Page 30: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley MapsSTRATEGIC DESIGN (PROBLEM SPACE)

Discovering subdomains

Supporting GenericCore

@suksr

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

n

Page 31: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley MapsSTRATEGIC DESIGN (SOLUTION SPACE)

Supporting GenericCore

Event Evaluation AccountSchedule MessageSession

Domain Models

@suksr

Deco

mpo

se &

Map

Analy

se &

Disc

over

Prob

lem

Spa

ceSo

lutio

n Sp

ace

Stra

tegi

c Des

ign

Page 32: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley Maps

Supporting GenericCore

Event Evaluation AccountSchedule Message

Speaker

Session

CfP

STRATEGIC DESIGN (SOLUTION SPACE)Domain Models

@suksr

Deco

mpo

se &

Map

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

nSo

lutio

n Sp

ace

Page 33: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley Maps

Supporting GenericCore

Event Evaluation AccountSchedule Message

Speaker Profile

Submitted Session

CfP Settings

RecipientOpen CfP Evaluated

SessionScheduled Session

STRATEGIC DESIGN (SOLUTION SPACE)Domain Models

@suksr

Deco

mpo

se &

Map

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

nSo

lutio

n Sp

ace

Page 34: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley Maps

Supporting GenericCore

STRATEGIC DESIGN (SOLUTION SPACE)Bounded Contexts

Linguistic/semantic boundary

Model integrity boundary

Event Evaluation AccountSchedule MessageSubmitted Session

CfP Settings

RecipientOpen CfP Evaluated

SessionScheduled Session

Speaker Profile SessionEvaluation

SubmissionHandling

EventMngmnt.

ScheduleMngmnt.

Messaging

Account Handling

@suksr

Deco

mpo

se &

Map

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

nSo

lutio

n Sp

ace

Page 35: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley Maps

Supporting GenericCore

STRATEGIC DESIGN (SOLUTION SPACE)

SubmissionHandling

EventMngmnt.

SessionEvaluation

Messaging Account Handling

ScheduleMngmnt.

Bounded Contexts

Ownership boundary

Linguistic/semantic boundary

Model integrity boundary

@suksr

Deco

mpo

se &

Map

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

nSo

lutio

n Sp

ace

Page 36: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley Maps

Supporting GenericCore

STRATEGIC DESIGN (SOLUTION SPACE)

SubmissionHandling

EventMngmnt.

SessionEvaluation

Messaging Account Handling

ScheduleMngmnt.

Bounded Contexts

Ownership boundary

Linguistic/semantic boundary

Model integrity boundary

Physical boundary

SCM

Data store

CI/CD

Artefact

@suksr

Deco

mpo

se &

Map

Analy

se &

Disc

over

Prob

lem

Spa

ceSt

rate

gic D

esig

nSo

lutio

n Sp

ace

Page 37: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley Maps

Supporting GenericCore

TACTICAL DESIGN

SubmissionHandling

EventMngmnt.

SessionEvaluation

Messaging Account Handling

ScheduleMngmnt.

Architectural Patterns

Architectural patterns can differ per Bounded Context, e.g.

Layered Architecture

Hexagonal Architecture

CQRS

@suksr

Deco

mpo

se &

Map

Analy

se &

Disc

over

Prob

lem

Spa

ceSo

lutio

n Sp

ace

Stra

tegi

c Des

ign

Tact

ical D

esig

n

Arch

itect

&

Impl

emen

t

Page 38: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Hexagonal Architecture

Business Logic

Application

REST-API

Port

Port

Message Broker

Adapter

Adapter

Adapter

PortInnerOuter

Outside

@suksr

Page 39: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley Maps

Supporting GenericCore

TACTICAL DESIGN

SubmissionHandling

EventMngmnt.

SessionEvaluation

Messaging Account Handling

ScheduleMngmnt.

Business Logic Implementation Patterns

Business logic implementation patterns can differ per Bounded Context, e.g.

Domain Model

Active Record

Transaction Script

@suksr

Deco

mpo

se &

Map

Analy

se &

Disc

over

Prob

lem

Spa

ceSo

lutio

n Sp

ace

Stra

tegi

c Des

ign

Tact

ical D

esig

n

Arch

itect

&

Impl

emen

t

Page 40: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley Maps

Supporting GenericCore

TACTICAL DESIGN

SubmissionHandling

EventMngmnt.

SessionEvaluation

Messaging Account Handling

ScheduleMngmnt.

Building Blocks of Domain Models

● Value Object● Entity● Aggregate● Repository● ApplicationService● Domain Event● ...

@suksr

Valu

e Ch

ainIn

visib

leVi

sible

Deco

mpo

se &

Map

Analy

se &

Disc

over

Prob

lem

Spa

ceSo

lutio

n Sp

ace

Stra

tegi

c Des

ign

Tact

ical D

esig

n

Arch

itect

&

Impl

emen

t

Page 41: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Example Domain Model

Event

create: Eventpublish

reschedulerename

EventIdid: string

Name

create: Namename: string

EventStatusCREATEDACTIVATEDDEACTIVATED

delete

Description

create: Description

desc: string

Period

create: Period

start: Dateend: Date

Value Object

Entity

Aggregate Root

Aggregate

@suksrEventModel

BOUNDED CONTEXT: EVENT MANAGEMENT

Page 42: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Backend-API w/ Serverless

Business Logic

Application

Port

Adapter

BOUNDED CONTEXT: EVENT MANAGEMENT

EventController

AWS API Gateway REST-API with AWS API-Gateway and

AWS Lambda

EventController

AWS API Gateway

newEvent deleteEvent publishEvent

POST /events

DELETE /events/{id}

POST /events/{id}/publish

InnerOuter

Outside

@suksr

(Adapter)

EventApplicationService(Port)

Page 43: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

export class EventController {

private readonly eventService: EventApplicationService;

public constructor(eventService: EventApplicationService) { this.eventService = eventService; }

public publishEvent: Handler = async (event: APIGatewayEvent, context: Context, callback: Callback) => {

if (!event.pathParameters && !event.pathParameters.id) { return callback(null, failure({ status: "error", error: "no event id specified" })); } const eventId = new EventId(event.pathParameters.id);

try {

await this.eventService.publishEvent(eventId); callback(null, success({ status: "ok" }));

} catch(e) { return callback(null, failure({ status: "error", error: e })); } };

public newEvent: Handler = async (event: APIGatewayEvent, context: Context, callback: Callback) => { // ... //

}

REST-API Adapter

Port

LambdaFunction

LambdaFunction

BOUNDED CONTEXT: EVENT MANAGEMENT

@suksr

Backend-API w/ Serverless

Page 44: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Application

EventController

AWS API Gateway

DynamoDBEventRepository

Event

EventApplicationService

EventRepository

@suksr

(Adapter)

(Port)

(Port)

(Adapter)

Backend-API w/ ServerlessBOUNDED CONTEXT: EVENT MANAGEMENT

InnerOuter

Outside

Page 45: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

export default class EventApplicationService {

private readonly eventRepository: EventRepository; constructor(eventRepository: EventRepository) { this.eventRepository = eventRepository; }

public async publishEvent(id: EventId): Promise<void> {

const event = await this.eventRepository.eventOfId(id);

if (!event) { throw new Error("Could not publish event with id " + id + ", since event does not exist."); }

event.publish(); await this.eventRepository.saveEvent(event); } public async newEvent(command: NewEventCommand): Promise<EventId> { // ... //

}

ApplicationService

@suksr

Backend-API w/ ServerlessBOUNDED CONTEXT: EVENT MANAGEMENT

Page 46: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Application

EventController

AWS API Gateway

DynamoDBEventRepository

Event

EventApplicationService

EventRepository

(Adapter)

(Port)

(Port)

(Adapter)

Domain ModelBC: EVENT MANAGEMENT

Event

create: Eventpublish

reschedulerename

EventIdid: string

Name

create: Namename: string

EventStatusCREATEDACTIVATEDDEACTIVATED

deactivate

Description

create: Description

desc: string

Period

create: Period

start: Dateend: Date

Value Object

Entity

Aggregate Root

Aggregate

@suksr

InnerOuter

Outside

Page 47: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

export default class Event {

readonly id: EventId; name: Name; description?: Description; status: EventStatus; period: Period;

private constructor(id: EventId, name: Name, status: EventStatus, period: Period, description?: Description) { this.id = id; this.name = name; this.description = description; this.status = status; this.period = period; }

public publish() { if (this.status === EventStatus.CLOSED) { throw new ValidationError("status","You cannot publish a closed event"); } if (this.status === EventStatus.PUBLISHED) { throw new ValidationError("status", "This event has already been published"); } this.status = EventStatus.PUBLISHED; }

public static create(id: EventId, name: Name, period: Period, status?: EventStatus, description?: Description): Event { // ... //}

Aggregate

@suksr

Page 48: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Application

EventController

AWS API Gateway

DynamoDBEventRepository

Event

EventApplicationService

EventRepository

export default interface EventRepository {

saveEvent(event: Event): void; eventOfId(id: EventId): Promise<Event|null>; // ... //}

@suksr

(Adapter)

(Port)

(Port)

(Adapter)

InnerOuter

Outside

Page 49: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Data Storage with AWS DynamoDB

@suksr

Application

EventController

AWS API Gateway

DynamoDBEventRepository

Event

EventApplicationService

EventRepository

(Adapter)

(Port)

(Port)

(Adapter)

InnerOuter

Outside

Page 50: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

export default class DynamoDBEventRepository implements EventRepository {

private static TABLE_NAME: string = "events"; private readonly dynamoDbClient: AWS.DynamoDB.DocumentClient;

constructor() { this.dynamoDbClient = new AWS.DynamoDB.DocumentClient(); }

public saveEvent(event: Event) { const params : DocumentClient.PutItemInput = { TableName: DynamoDBEventRepository.TABLE_NAME, Item: { eventId: event.id.toString(), name: event.name.value, startDate: event.period.startDate.toISOString(), endDate: event.period.endDate.toISOString(), description: event.description ? event.description.value: undefined, eventStatus: event.status, cfp: event.cfp ? { description: event.cfp.description.value, startDate: event.cfp.period.startDate.toISOString(), endDate: event.cfp.period.endDate.toISOString(), id: event.cfp.id ? event.cfp.id.toString(): null }: null } };

return this.dynamoDbClient.put(params).promise(); }

public async eventOfId(id: EventId): Promise<Event|null> { // ... //}

Database Adapter

@suksr

Page 51: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Application

EventController

AWS API Gateway

DynamoDBEventRepository

Event

EventApplicationService

EventRepository

(Adapter)

(Port)

(Port)

(Adapter)

Event

create: Eventpublish

reschedulerename

EventIdid: string

Name

create: Namename: string

EventStatusCREATEDACTIVATEDDEACTIVATED

deactivate

Description

create: Description

desc: string

Period

create: Period

start: Dateend: Date

Value Object

Entity

Aggregate Root

Aggregate

@suksr

InnerOuter

Outside

Page 52: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Valu

e Ch

ainIn

visib

leVi

sible

Genesis Custom-Built Product (+rental) Commodity (+utility)Evolution

Evaluate Submissions

Manage Event

Organiser

Build & PublishSchedule

Communicate w/ Speakers

Signup/Signin

Speaker

Submit Session

DDD & Wardley Maps

Supporting GenericCore

TACTICAL DESIGN

SubmissionHandling

EventMngmnt.

SessionEvaluation

Messaging Account Handling

ScheduleMngmnt.

DDD suits best for the core subdomain

Movement

Build in-house Use/buy off-the-shelf product

Outsource to utility suppliers

- or -- or -

@suksr

Prob

lem

Spa

ceSo

lutio

n Sp

ace

Stra

tegi

c Des

ign

Tact

ical D

esig

n

Page 53: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Decomposing into Modular Components

Business Domain

Needs Strategy

Better Software Design

Ubiquitous Language

Domain Knowledge

Domain Experts

Development Teams

Collaboration

Gaining Domain Knowledge

Aligning Software Design to Business Domain

Do not apply DDD everywhere!Focus on your core!

Core Subdomain

DDD helps with ...

@suksr

Core Subdomain

Discovering the Core Subdomain

Page 54: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Some References

https://learnwardleymapping.com/https://medium.com/wardleymapshttps://miro.com/blog/wardley-maps-whiteboard-canvas/https://github.com/wardley-maps-community/awesome-wardley-maps

Page 55: Designing a Serverless Application with Domain Driven DesignDesigning a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr. $2,840,000,000,000

Susanne KaiserIndependent Tech Consultant

@[email protected]