SlideShare a Scribd company logo
1 of 76
Download to read offline
1 / 76
Advanced Application Architecture
Layers, Ports & Adapters
Matthias Noback
info@matthiasnoback.nl
2 / 76
Slides are on Twitter
● @matthiasnoback
● https://twitter.com/matthiasnoback
3 / 76
https://github.com/matthiasnoback/layers-ports-and-adapters-workshop/
4 / 76
Demo time
http://localhost:8080
5 / 76
Architecture
● Application-level design
● An application’s relation with other systems
● Framework/library/vendor choices?
● Big design upfront?
Frameworks dictate the structure of your project
High-level structural elements
● Models/entities
● Controllers
● Views/templates
● Migrations
● Configuration
Thin controllers, fat models
● "Only briefly visit your controller, go to your model
as fast as you can."
● In practice: we build services, lots of them, and large
ones too.
The effects of a framework-driven
architecture
● Implicit use case scenarios
● Implicit connections to actors
● Coupling to the framework
Why bad?
● Scenarios are interrelated (legacy spaghetti)
● Domain logic is mixed with infrastructure logic
● Impossible to switch frameworks
What do we want?
● The ability to focus on domain logic without thinking
about storage, web service, web requests, etc.
● The ability to switch to a different database,
framework, message queue, filesystem, etc.
Part 1: Layers
14 / 76
Traditional layering
view
controller
model
15 / 76
Layers
● Help you protect what's in a deeper layer
16 / 76
Layers
● Allow you to define dependency rules
17 / 76
Layers
● Define the right place to put things
18 / 76
Layers
● Horizontal division (as opposed to...)
19 / 76
Use cases
● Vertical division
20 / 76
Layers: combine both
21 / 76
Cohesion – A basic set of layers
● Infrastructure
● Application
● Domain
22 / 76
Layer conventions
Domain model:
➤ Entities
➤ Value objects
➤ Domain services
➤ Factories
Business logic
Decisions
Data
State
Behavior
● Domain layer
23 / 76
Layer conventions
➤ Find an object
➤ Change something
➤ Notify something
➤ Get some information
Use cases
Orchestration
● Application layer
24 / 76
Layer conventions
Communication with:
➤ HTTP client
➤ Database
➤ Filesystem
➤ Email server
➤ Message broker
Connecting the
application to the
world outside
● Infrastructure layer
25 / 76
assignment/01.md
● Layers
26 / 76
Part 2: Ports & Adapters
27 / 76
Messaging is the big idea
28 / 76
Ports (cohesion)
User interface
Persistence
● Web, CLI, test client, messages, database queries
29 / 76
Ports... And adapters
HTTP
SQL
● Translation
30 / 76
Hexagonal architecture
User interface
Persistence
31 / 76
Ports... And adapters
(De)serialization, translation, structural
validation
HTTP
SQL
32 / 76
assignment/02.md
● Ports
33 / 76
Port Adapters
● ...in the Infrastructure layer
34 / 76
Application services
● ... in the Application layer
35 / 76
Domain model
● … in the Domain layer
36 / 76
Application services
● Delivery-mechanism agnostic
37 / 76
Application services
● Also known as "command handlers"
● Command object is a DTO
● Represents a user's intention
● Contains primitive-type values
38 / 76
Application services
● Translate, and orchestrate
● From primitive-type values to rich domain objects
● Manipulates an entity
● Persists it
● May dispatch events
39 / 76
assignment/03.md
● Input adapters
40 / 76
Validation
● At multiple levels:
● Structural validation of messages
● User-friendly input validation
● Domain invariant protection
41 / 76
Structural validation
● In the infrastructure layer:
● Form keys
● JSON schema
42 / 76
User-friendly input validation
● Also in the infrastructure layer
● Usability concern
● Prevent problems later on
● Localized, translated
● Friendly
43 / 76
Domain invariant protection
● In Application and Domain layer
● Domain objects: always valid
● Valid state
● Valid state transitions
44 / 76
assignment/04.md
● Input validation
45 / 76
Application services
● Transactional consistency
46 / 76
Coupling – The Dependency rule
● Layers should only depend on deeper layers
47 / 76
Coupling – The Dependency rule
● Infrastructure
● Application
● Domain
48 / 76
Dependency inversion principle
● Classes should always depend on things that are
more abstract
49 / 76
Dependency inversion principle
low-levelconcrete class specific
abstract interface generic high-level
50 / 76
Dependency inversion principle
use
51 / 76
Dependency inversion principle
use implement
52 / 76
Coupling is about dependencies in
code
● Use Dependency Injection
53 / 76
assignment/05.md
● Output adapter
54 / 76
Incomplete entity
● A Meetup without an ID…
55 / 76
Database-generated ID
● Faux-auto increment (check out the code)
56 / 76
Alternative: UUID
● Universally Unique Identifier
● “7d7fd0b2-0cb5-42ac-b697-3f7bfce24df9”
57 / 76
assignment/06.md
● A hidden dependency on the persistence mechanism
58 / 76
Alternative: Sequence
● MeetupId encapsulates the type of ID used
59 / 76
Advantages of using Layers,
ports & adapters
● Offers insight into the application
● Provides a useful convention for the team
● Isolates the low-level details
● Allows for alternative implementations
● Helps with testing
60 / 76
Part 3: Testing
61 / 76
Unit tests
● Testing your units of code
● One class at a time
● No IO
● No setup required
● Mocking only dependencies "you own"
62 / 76
Integration tests
● Testing your adapters
● Maybe multiple classes
● Including IO
● Some setup required
● Mocking no dependencies
63 / 76
Acceptance tests
● Testing your application services
● Multiple classes
● Use cases
● Infrastructure stand-ins
64 / 76
System tests
● Testing your application end-to-end
● The real deal
65 / 76
Testing pyramid
● Make it well-balanced
Unit
Integration
System
Acceptance
66 / 76
Testing pyramid
● Make it well-balanced
Supports development
Prevents regressionSlow, brittle
Fast, stable
Proof of effectiveness
Proof of Correctness
67 / 76
assignment/07.md
● Different types of tests
68 / 76
Acceptance tests
● Use infrastructure stand-ins
Acceptance test
test the
application
layer
69 / 76
Persistence
FileBased InMemory
Port
Adapters
70 / 76
MeetupRepository
FileBasedMeetupReposit
ory
InMemoryMeetupReposit
ory
Domain
Infrastructure
implements implements
71 / 76
assignment/08.md
● A test double for the Persistence port
72 / 76
assignment/09.md
● An acceptance test for the application layer
73 / 76
assignment/10.md
● Notifications
74 / 76
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
75 / 76https://matthiasnoback.nl
76 / 76
Questions? Feedback?
info@matthiasnoback.nl
@matthiasnoback
https://joind.in/talk/89f5b

More Related Content

What's hot

Brutal refactoring, lying code, the Churn, and other emotional stories from L...
Brutal refactoring, lying code, the Churn, and other emotional stories from L...Brutal refactoring, lying code, the Churn, and other emotional stories from L...
Brutal refactoring, lying code, the Churn, and other emotional stories from L...Matthias Noback
 
Andrii Sliusar "Module Architecture of React-Redux Applications"
Andrii Sliusar "Module Architecture of React-Redux Applications"Andrii Sliusar "Module Architecture of React-Redux Applications"
Andrii Sliusar "Module Architecture of React-Redux Applications"LogeekNightUkraine
 
Cody_Zeng_HPE_Intern_Poster
Cody_Zeng_HPE_Intern_PosterCody_Zeng_HPE_Intern_Poster
Cody_Zeng_HPE_Intern_PosterCody Zeng
 
"Fast / Resilient / .NET – What to Choose?" Serhiy Kalinets
 "Fast / Resilient / .NET – What to Choose?" Serhiy Kalinets "Fast / Resilient / .NET – What to Choose?" Serhiy Kalinets
"Fast / Resilient / .NET – What to Choose?" Serhiy KalinetsFwdays
 
Enterprise Design Pattern: ACID principal ,Concurrency Patterns
Enterprise Design Pattern:ACID principal,Concurrency PatternsEnterprise Design Pattern:ACID principal,Concurrency Patterns
Enterprise Design Pattern: ACID principal ,Concurrency PatternsSergey Bandysik
 
DevBeat 2013 - Developer-first Security
DevBeat 2013 - Developer-first SecurityDevBeat 2013 - Developer-first Security
DevBeat 2013 - Developer-first SecurityCoverity
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in RailsHans Yu
 
Finding Defects in C#: Coverity vs. FxCop
Finding Defects in C#: Coverity vs. FxCopFinding Defects in C#: Coverity vs. FxCop
Finding Defects in C#: Coverity vs. FxCopCoverity
 
Reactive Programming In Java Using: Project Reactor
Reactive Programming In Java Using: Project ReactorReactive Programming In Java Using: Project Reactor
Reactive Programming In Java Using: Project ReactorKnoldus Inc.
 
Static Analysis Primer
Static Analysis PrimerStatic Analysis Primer
Static Analysis PrimerCoverity
 
Active Object Design Pattern
Active Object Design PatternActive Object Design Pattern
Active Object Design Patternjeremiahdjordan
 
Documenting .NET Code with XML Comments
Documenting .NET Code with XML CommentsDocumenting .NET Code with XML Comments
Documenting .NET Code with XML CommentsPatrick Gates
 
Crafting high quality code
Crafting high quality code Crafting high quality code
Crafting high quality code Allan Mangune
 
Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017Petr Bechyně
 
Not all objects are equal - strategies for designing testable code
Not all objects are equal - strategies for designing testable codeNot all objects are equal - strategies for designing testable code
Not all objects are equal - strategies for designing testable codeSagy Rozman
 
Living with-spec
Living with-specLiving with-spec
Living with-specSimon Belak
 
Living with-spec
Living with-specLiving with-spec
Living with-specSimon Belak
 

What's hot (20)

Brutal refactoring, lying code, the Churn, and other emotional stories from L...
Brutal refactoring, lying code, the Churn, and other emotional stories from L...Brutal refactoring, lying code, the Churn, and other emotional stories from L...
Brutal refactoring, lying code, the Churn, and other emotional stories from L...
 
Andrii Sliusar "Module Architecture of React-Redux Applications"
Andrii Sliusar "Module Architecture of React-Redux Applications"Andrii Sliusar "Module Architecture of React-Redux Applications"
Andrii Sliusar "Module Architecture of React-Redux Applications"
 
Intro to ember.js
Intro to ember.jsIntro to ember.js
Intro to ember.js
 
Reactive programming
Reactive programmingReactive programming
Reactive programming
 
Cody_Zeng_HPE_Intern_Poster
Cody_Zeng_HPE_Intern_PosterCody_Zeng_HPE_Intern_Poster
Cody_Zeng_HPE_Intern_Poster
 
"Fast / Resilient / .NET – What to Choose?" Serhiy Kalinets
 "Fast / Resilient / .NET – What to Choose?" Serhiy Kalinets "Fast / Resilient / .NET – What to Choose?" Serhiy Kalinets
"Fast / Resilient / .NET – What to Choose?" Serhiy Kalinets
 
Enterprise Design Pattern: ACID principal ,Concurrency Patterns
Enterprise Design Pattern:ACID principal,Concurrency PatternsEnterprise Design Pattern:ACID principal,Concurrency Patterns
Enterprise Design Pattern: ACID principal ,Concurrency Patterns
 
DevBeat 2013 - Developer-first Security
DevBeat 2013 - Developer-first SecurityDevBeat 2013 - Developer-first Security
DevBeat 2013 - Developer-first Security
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
Finding Defects in C#: Coverity vs. FxCop
Finding Defects in C#: Coverity vs. FxCopFinding Defects in C#: Coverity vs. FxCop
Finding Defects in C#: Coverity vs. FxCop
 
Reactive Programming In Java Using: Project Reactor
Reactive Programming In Java Using: Project ReactorReactive Programming In Java Using: Project Reactor
Reactive Programming In Java Using: Project Reactor
 
Static Analysis Primer
Static Analysis PrimerStatic Analysis Primer
Static Analysis Primer
 
Active Object Design Pattern
Active Object Design PatternActive Object Design Pattern
Active Object Design Pattern
 
Documenting .NET Code with XML Comments
Documenting .NET Code with XML CommentsDocumenting .NET Code with XML Comments
Documenting .NET Code with XML Comments
 
Crafting high quality code
Crafting high quality code Crafting high quality code
Crafting high quality code
 
State, when state?
State, when state?State, when state?
State, when state?
 
Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017
 
Not all objects are equal - strategies for designing testable code
Not all objects are equal - strategies for designing testable codeNot all objects are equal - strategies for designing testable code
Not all objects are equal - strategies for designing testable code
 
Living with-spec
Living with-specLiving with-spec
Living with-spec
 
Living with-spec
Living with-specLiving with-spec
Living with-spec
 

Similar to Layers, ports and adapters

Object oriented design patterns for distributed systems
Object oriented design patterns for distributed systemsObject oriented design patterns for distributed systems
Object oriented design patterns for distributed systemsJordan McBain
 
Liferay portals in real projects
Liferay portals  in real projectsLiferay portals  in real projects
Liferay portals in real projectsIBACZ
 
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020OdessaJS Conf
 
micro services architecture (FrosCon2014)
micro services architecture (FrosCon2014)micro services architecture (FrosCon2014)
micro services architecture (FrosCon2014)smancke
 
[SC London] "Testing Microservices: from Development to Production
[SC London] "Testing Microservices: from Development to Production[SC London] "Testing Microservices: from Development to Production
[SC London] "Testing Microservices: from Development to ProductionDaniel Bryant
 
Modern Testing Strategies for Evolving Ecosystems
Modern Testing Strategies for Evolving EcosystemsModern Testing Strategies for Evolving Ecosystems
Modern Testing Strategies for Evolving EcosystemsJulian Warszawski
 
OUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeOUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeGeorgi Kodinov
 
Platform Security IRL: Busting Buzzwords & Building Better
Platform Security IRL:  Busting Buzzwords & Building BetterPlatform Security IRL:  Busting Buzzwords & Building Better
Platform Security IRL: Busting Buzzwords & Building BetterEqual Experts
 
Azure DevOps Pipeline setup for Mule APIs #36
Azure DevOps Pipeline setup for Mule APIs #36Azure DevOps Pipeline setup for Mule APIs #36
Azure DevOps Pipeline setup for Mule APIs #36MysoreMuleSoftMeetup
 
From class to architecture
From class to architectureFrom class to architecture
From class to architectureMarcin Hawraniak
 
CodeOne SF 2018: "Testing Java Microservices: From Development to Production"
CodeOne SF 2018: "Testing Java Microservices: From Development to Production"CodeOne SF 2018: "Testing Java Microservices: From Development to Production"
CodeOne SF 2018: "Testing Java Microservices: From Development to Production"Daniel Bryant
 
Testing java microservices: from development to production
Testing java microservices: from development to productionTesting java microservices: from development to production
Testing java microservices: from development to productionAbraham Marin-Perez
 
Testing Java Microservices: From Development to Production
Testing Java Microservices: From Development to ProductionTesting Java Microservices: From Development to Production
Testing Java Microservices: From Development to ProductionDaniel Bryant
 
Evolveum: About the company and its product - midPoint
Evolveum: About the company and its product - midPointEvolveum: About the company and its product - midPoint
Evolveum: About the company and its product - midPointEvolveum
 
Code decoupling from Symfony (and others frameworks) - PHP Conf Asia 2018
Code decoupling from Symfony (and others frameworks) - PHP Conf Asia 2018Code decoupling from Symfony (and others frameworks) - PHP Conf Asia 2018
Code decoupling from Symfony (and others frameworks) - PHP Conf Asia 2018Miguel Gallardo
 
Devoxx UK 2019: "Testing Java Microservices: From Development to Production
Devoxx UK 2019: "Testing Java Microservices: From Development to ProductionDevoxx UK 2019: "Testing Java Microservices: From Development to Production
Devoxx UK 2019: "Testing Java Microservices: From Development to ProductionDaniel Bryant
 
Lessons learned validating 60,000 pages of api documentation
Lessons learned validating 60,000 pages of api documentationLessons learned validating 60,000 pages of api documentation
Lessons learned validating 60,000 pages of api documentationBob Binder
 

Similar to Layers, ports and adapters (20)

Object oriented design patterns for distributed systems
Object oriented design patterns for distributed systemsObject oriented design patterns for distributed systems
Object oriented design patterns for distributed systems
 
Liferay portals in real projects
Liferay portals  in real projectsLiferay portals  in real projects
Liferay portals in real projects
 
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
 
micro services architecture (FrosCon2014)
micro services architecture (FrosCon2014)micro services architecture (FrosCon2014)
micro services architecture (FrosCon2014)
 
KrakenD API Gateway
KrakenD API GatewayKrakenD API Gateway
KrakenD API Gateway
 
API Gateway report
API Gateway reportAPI Gateway report
API Gateway report
 
Thick client application security assessment
Thick client  application security assessmentThick client  application security assessment
Thick client application security assessment
 
[SC London] "Testing Microservices: from Development to Production
[SC London] "Testing Microservices: from Development to Production[SC London] "Testing Microservices: from Development to Production
[SC London] "Testing Microservices: from Development to Production
 
Modern Testing Strategies for Evolving Ecosystems
Modern Testing Strategies for Evolving EcosystemsModern Testing Strategies for Evolving Ecosystems
Modern Testing Strategies for Evolving Ecosystems
 
OUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeOUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source Code
 
Platform Security IRL: Busting Buzzwords & Building Better
Platform Security IRL:  Busting Buzzwords & Building BetterPlatform Security IRL:  Busting Buzzwords & Building Better
Platform Security IRL: Busting Buzzwords & Building Better
 
Azure DevOps Pipeline setup for Mule APIs #36
Azure DevOps Pipeline setup for Mule APIs #36Azure DevOps Pipeline setup for Mule APIs #36
Azure DevOps Pipeline setup for Mule APIs #36
 
From class to architecture
From class to architectureFrom class to architecture
From class to architecture
 
CodeOne SF 2018: "Testing Java Microservices: From Development to Production"
CodeOne SF 2018: "Testing Java Microservices: From Development to Production"CodeOne SF 2018: "Testing Java Microservices: From Development to Production"
CodeOne SF 2018: "Testing Java Microservices: From Development to Production"
 
Testing java microservices: from development to production
Testing java microservices: from development to productionTesting java microservices: from development to production
Testing java microservices: from development to production
 
Testing Java Microservices: From Development to Production
Testing Java Microservices: From Development to ProductionTesting Java Microservices: From Development to Production
Testing Java Microservices: From Development to Production
 
Evolveum: About the company and its product - midPoint
Evolveum: About the company and its product - midPointEvolveum: About the company and its product - midPoint
Evolveum: About the company and its product - midPoint
 
Code decoupling from Symfony (and others frameworks) - PHP Conf Asia 2018
Code decoupling from Symfony (and others frameworks) - PHP Conf Asia 2018Code decoupling from Symfony (and others frameworks) - PHP Conf Asia 2018
Code decoupling from Symfony (and others frameworks) - PHP Conf Asia 2018
 
Devoxx UK 2019: "Testing Java Microservices: From Development to Production
Devoxx UK 2019: "Testing Java Microservices: From Development to ProductionDevoxx UK 2019: "Testing Java Microservices: From Development to Production
Devoxx UK 2019: "Testing Java Microservices: From Development to Production
 
Lessons learned validating 60,000 pages of api documentation
Lessons learned validating 60,000 pages of api documentationLessons learned validating 60,000 pages of api documentation
Lessons learned validating 60,000 pages of api documentation
 

More from Matthias Noback

Rector fireside chat - PHPMiNDS meetup
Rector fireside chat - PHPMiNDS meetupRector fireside chat - PHPMiNDS meetup
Rector fireside chat - PHPMiNDS meetupMatthias Noback
 
DPC 2019, Amsterdam: Beyond design patterns and principles - writing good OO ...
DPC 2019, Amsterdam: Beyond design patterns and principles - writing good OO ...DPC 2019, Amsterdam: Beyond design patterns and principles - writing good OO ...
DPC 2019, Amsterdam: Beyond design patterns and principles - writing good OO ...Matthias Noback
 
Beyond design principles and patterns (muCon 2019 edition)
Beyond design principles and patterns (muCon 2019 edition)Beyond design principles and patterns (muCon 2019 edition)
Beyond design principles and patterns (muCon 2019 edition)Matthias Noback
 
Brutal refactoring, lying code, the Churn, and other emotional stories from L...
Brutal refactoring, lying code, the Churn, and other emotional stories from L...Brutal refactoring, lying code, the Churn, and other emotional stories from L...
Brutal refactoring, lying code, the Churn, and other emotional stories from L...Matthias Noback
 
Beyond Design Principles and Patterns
Beyond Design Principles and PatternsBeyond Design Principles and Patterns
Beyond Design Principles and PatternsMatthias Noback
 
Building autonomous services
Building autonomous servicesBuilding autonomous services
Building autonomous servicesMatthias Noback
 
Advanced application architecture
Advanced application architectureAdvanced application architecture
Advanced application architectureMatthias Noback
 
Continously delivering containerized microservices
Continously delivering containerized microservicesContinously delivering containerized microservices
Continously delivering containerized microservicesMatthias Noback
 
Living Documentation (presentation)
Living Documentation (presentation)Living Documentation (presentation)
Living Documentation (presentation)Matthias Noback
 
TDD - A Reminder of the Principles
TDD - A Reminder of the PrinciplesTDD - A Reminder of the Principles
TDD - A Reminder of the PrinciplesMatthias Noback
 
Advanced Application Architecture (workshop slides)
Advanced Application Architecture (workshop slides)Advanced Application Architecture (workshop slides)
Advanced Application Architecture (workshop slides)Matthias Noback
 
Programming with Cmdr. Chris Hadfield
Programming with Cmdr. Chris HadfieldProgramming with Cmdr. Chris Hadfield
Programming with Cmdr. Chris HadfieldMatthias Noback
 

More from Matthias Noback (20)

Rector fireside chat - PHPMiNDS meetup
Rector fireside chat - PHPMiNDS meetupRector fireside chat - PHPMiNDS meetup
Rector fireside chat - PHPMiNDS meetup
 
DPC 2019, Amsterdam: Beyond design patterns and principles - writing good OO ...
DPC 2019, Amsterdam: Beyond design patterns and principles - writing good OO ...DPC 2019, Amsterdam: Beyond design patterns and principles - writing good OO ...
DPC 2019, Amsterdam: Beyond design patterns and principles - writing good OO ...
 
Beyond design principles and patterns (muCon 2019 edition)
Beyond design principles and patterns (muCon 2019 edition)Beyond design principles and patterns (muCon 2019 edition)
Beyond design principles and patterns (muCon 2019 edition)
 
Brutal refactoring, lying code, the Churn, and other emotional stories from L...
Brutal refactoring, lying code, the Churn, and other emotional stories from L...Brutal refactoring, lying code, the Churn, and other emotional stories from L...
Brutal refactoring, lying code, the Churn, and other emotional stories from L...
 
Beyond Design Principles and Patterns
Beyond Design Principles and PatternsBeyond Design Principles and Patterns
Beyond Design Principles and Patterns
 
Designing for Autonomy
Designing for AutonomyDesigning for Autonomy
Designing for Autonomy
 
Docker workshop
Docker workshopDocker workshop
Docker workshop
 
Docker swarm workshop
Docker swarm workshopDocker swarm workshop
Docker swarm workshop
 
Docker compose workshop
Docker compose workshopDocker compose workshop
Docker compose workshop
 
Building autonomous services
Building autonomous servicesBuilding autonomous services
Building autonomous services
 
Designing for autonomy
Designing for autonomyDesigning for autonomy
Designing for autonomy
 
Advanced application architecture
Advanced application architectureAdvanced application architecture
Advanced application architecture
 
Continously delivering containerized microservices
Continously delivering containerized microservicesContinously delivering containerized microservices
Continously delivering containerized microservices
 
Apprendre le français
Apprendre le françaisApprendre le français
Apprendre le français
 
Living Documentation (presentation)
Living Documentation (presentation)Living Documentation (presentation)
Living Documentation (presentation)
 
TDD - A Reminder of the Principles
TDD - A Reminder of the PrinciplesTDD - A Reminder of the Principles
TDD - A Reminder of the Principles
 
Docker workshop
Docker workshopDocker workshop
Docker workshop
 
CQRS & Event Sourcing
CQRS & Event SourcingCQRS & Event Sourcing
CQRS & Event Sourcing
 
Advanced Application Architecture (workshop slides)
Advanced Application Architecture (workshop slides)Advanced Application Architecture (workshop slides)
Advanced Application Architecture (workshop slides)
 
Programming with Cmdr. Chris Hadfield
Programming with Cmdr. Chris HadfieldProgramming with Cmdr. Chris Hadfield
Programming with Cmdr. Chris Hadfield
 

Recently uploaded

chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 

Recently uploaded (20)

chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 

Layers, ports and adapters