Slides of the talk I gave at ConFoo Montréal 2019 about "Hexagonal Architecture".
Hexagonal Architecture, Clean Architecture, Domain-Driven Design… You may have heard about them. Let's start from scratch in this session and go beyond the buzzwords. We'll go together though these ideas to understand how you can improve the maintainability of your projects', either greenfield or legacy.
Hexagonal architecture is a software architecture model created in 2005 to help isolate domain/business logic from external interfaces and infrastructure. It focuses on separating core domain functions from outside influences like databases, user interfaces, and networking to allow independent development and testing of each layer. Adapters act as intermediaries between the isolated domain/core and external components like databases or web services, allowing for flexibility in how the core interacts with these external elements. Hexagonal architecture can help with high testability, loose coupling between layers, and scalability by allowing external ports to be scaled independently.
Nowadays traditional layered monolithic architecture in Java world is not so popular as 5-10 years ago. I remember how we wrote tons of code for each layer repeating almost the same parts for every application. Add unit and integration testing to understand how much time and efforts has been spent on repeatable work. All cool ideas around DDD (domain driven design) and Hexagonal Architecture was just a nice theory because reality hasn’t allow us to implement it easily. Even Dependency Injection with Spring framework was completely focused on traditional layered approach, not even talking about JavaEE platform.
Today we have Spring Boot ecosystem covering most of our needs for integration with almost all possible technologies and microservices architectural trend, enabling completely new approach to build Java applications around domain model. It is so natural to build Java domain-oriented services and connect them with external world using ports and adapters, that Hexagonal Architecture is almost enabled by default. You just need to switch your way of thinking…
Kata: Hexagonal Architecture / Ports and Adaptersholsky
Hexagonal architecture is a software architecture pattern coined by Alistair Cockburn in 2005 that aims to make applications highly testable by separating the domain and application logic from the outer parts of an application like the user interface and databases. It uses port and adapter interfaces to connect the domain to the outside world which allows replacing external elements for testing purposes and makes the core logic independent of the outside tools and libraries. This decoupling brings benefits like easier testing without external elements, flexibility to change requirements and services, and emergent design.
The document discusses hexagonal architecture, also known as ports and adapters architecture. It is an alternative to traditional multi-layer architectures that aims to decouple the application core from external influences like databases, web frameworks, and other dependencies. The core domain logic is separated from external influences by defining application programming interfaces (APIs) called "ports" that external "adapters" implement. This allows the core to be developed and tested in isolation. The document provides an example implementation of a ticket management system using this architecture.
Commands, events, queries - three types of messages that travel through your application. Some originate from the web, some from the command-line. Your application sends some of them to a database, or a message queue. What is the ideal infrastructure for an application to support this on-going stream of messages? What kind of architectural design fits best?
This talk provides answers to these questions: we take the *hexagonal* approach to software architecture. We look at messages, how they cross boundaries and how you can make steady communication lines between your application and other systems, like web browsers, terminals, databases and message queues. You will learn how to separate the technical aspects of these connections from the core behavior of your application by implementing design patterns like the *command bus*, and design principles like *dependency inversion*.
This document discusses clean architecture, which aims to separate an application into distinct layers. The core application logic is separated from the user interface and database access. This improves testability and flexibility. Some benefits of clean architecture include excellent testability since each component can be tested in isolation, clearly defined separation of concerns, and flexibility to change parts of the application independently. However, there are also costs like increased complexity with more classes and data conversions between layers.
Slides of the talk I gave at ConFoo Montréal 2019 about "Hexagonal Architecture".
Hexagonal Architecture, Clean Architecture, Domain-Driven Design… You may have heard about them. Let's start from scratch in this session and go beyond the buzzwords. We'll go together though these ideas to understand how you can improve the maintainability of your projects', either greenfield or legacy.
Hexagonal architecture is a software architecture model created in 2005 to help isolate domain/business logic from external interfaces and infrastructure. It focuses on separating core domain functions from outside influences like databases, user interfaces, and networking to allow independent development and testing of each layer. Adapters act as intermediaries between the isolated domain/core and external components like databases or web services, allowing for flexibility in how the core interacts with these external elements. Hexagonal architecture can help with high testability, loose coupling between layers, and scalability by allowing external ports to be scaled independently.
Nowadays traditional layered monolithic architecture in Java world is not so popular as 5-10 years ago. I remember how we wrote tons of code for each layer repeating almost the same parts for every application. Add unit and integration testing to understand how much time and efforts has been spent on repeatable work. All cool ideas around DDD (domain driven design) and Hexagonal Architecture was just a nice theory because reality hasn’t allow us to implement it easily. Even Dependency Injection with Spring framework was completely focused on traditional layered approach, not even talking about JavaEE platform.
Today we have Spring Boot ecosystem covering most of our needs for integration with almost all possible technologies and microservices architectural trend, enabling completely new approach to build Java applications around domain model. It is so natural to build Java domain-oriented services and connect them with external world using ports and adapters, that Hexagonal Architecture is almost enabled by default. You just need to switch your way of thinking…
Kata: Hexagonal Architecture / Ports and Adaptersholsky
Hexagonal architecture is a software architecture pattern coined by Alistair Cockburn in 2005 that aims to make applications highly testable by separating the domain and application logic from the outer parts of an application like the user interface and databases. It uses port and adapter interfaces to connect the domain to the outside world which allows replacing external elements for testing purposes and makes the core logic independent of the outside tools and libraries. This decoupling brings benefits like easier testing without external elements, flexibility to change requirements and services, and emergent design.
The document discusses hexagonal architecture, also known as ports and adapters architecture. It is an alternative to traditional multi-layer architectures that aims to decouple the application core from external influences like databases, web frameworks, and other dependencies. The core domain logic is separated from external influences by defining application programming interfaces (APIs) called "ports" that external "adapters" implement. This allows the core to be developed and tested in isolation. The document provides an example implementation of a ticket management system using this architecture.
Commands, events, queries - three types of messages that travel through your application. Some originate from the web, some from the command-line. Your application sends some of them to a database, or a message queue. What is the ideal infrastructure for an application to support this on-going stream of messages? What kind of architectural design fits best?
This talk provides answers to these questions: we take the *hexagonal* approach to software architecture. We look at messages, how they cross boundaries and how you can make steady communication lines between your application and other systems, like web browsers, terminals, databases and message queues. You will learn how to separate the technical aspects of these connections from the core behavior of your application by implementing design patterns like the *command bus*, and design principles like *dependency inversion*.
This document discusses clean architecture, which aims to separate an application into distinct layers. The core application logic is separated from the user interface and database access. This improves testability and flexibility. Some benefits of clean architecture include excellent testability since each component can be tested in isolation, clearly defined separation of concerns, and flexibility to change parts of the application independently. However, there are also costs like increased complexity with more classes and data conversions between layers.
This document discusses clean architecture principles for mobile applications. It describes common iOS code smells like god view controllers and tightly coupled code. The document introduces SOLID principles to improve code quality and testability. It then outlines architectural layers including entities, use cases, interface adapters, and frameworks. The layers are arranged based on the dependency rule, where inner layers do not depend on outer ones. Specific patterns like MVC, MVP, MVVM, VIPER and repositories are presented for each layer. The document emphasizes designing applications that are decoupled from frameworks and user interfaces to improve reusability and flexibility.
Clean Architecture Essentials - Stockholm Software CraftsmanshipIvan Paulovich
About the talk:
Software Architecture is not about picking frameworks then gluing the pieces together! Let's dig into a software implementation designed to support the use cases, we will learn how to make the use cases a standalone component and see how a good architecture allows major decisions to be deferred. We will discuss component coupling and cohesion during the development timeline. Is your application architecture a Web Application? Are your tests taking too long to run? You will learn how to make the delivery mechanism an irrelevant and testable detail.
About the speaker:
Ivan Paulovich is an Agile .NET developer that enjoy solutions based on use cases and decoupled from technology details. Active on GitHub he supports OSS about Domain-Driven Design, TDD, Event Sourcing, CQRS, SOLID and Microservices. Microsoft MVP Reconnect. Checkout @ivanpaulovich on GitHub.
2012 the clean architecture by Uncle bob GEORGE LEON
The document discusses the Clean Architecture, which separates a software system into concentric circles or layers to achieve separation of concerns. The inner circles contain general high-level business rules and logic, while the outer circles contain mechanisms and frameworks. The key rule is that dependencies can only point inward - outer layers cannot depend on inner layers. This allows the system to be independent of frameworks, testable without external elements, and independent of interfaces like the UI or database. Data crossing boundaries is simplified to avoid dependencies between layers. Adhering to these principles creates a system that is intrinsically testable and able to replace obsolete external parts with minimal effort.
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Steve Pember
In this presentation we will present the general philosophy of Clean Architecture, Hexagonal Architecture, and Ports & Adapters: discussing why these approaches are useful and general guidelines for introducing them to your code. Chiefly, we will show how to implement these patterns within your Spring (Boot) Applications. Through a publicly available reference app, we will demonstrate what these concepts can look like within Spring and walkthrough a handful of scenarios: isolating core business logic, ease of testing, and adding a new feature or two.
The document discusses implementing Clean Architecture on Android apps. It describes challenges with traditional architectures like MVP where business logic is mixed with views. Clean Architecture separates concerns into layers - presentation, domain, and data. This makes apps easier to understand, maintain, and test. The domain and presentation layers are independent of frameworks, allowing flexibility. Testing can target each layer individually using tools like Espresso, JUnit, and Mockito. Overall Clean Architecture improves testability and decouples the codebase.
Clean Pragmatic Architecture - Avoiding a MonolithVictor Rentea
Talk built based on several of my trainings: http://www.victorrentea.ro/#training
Covers: Clean/Onion/Hexagonal Architecture, Domain Entities, Value Objects, Repository, Extract When it Grows Principle, Dependency Inversion Principle, Clean Code and Design Patterns.
These are the backing slides of the talks given at JPoint 2017 and Devoxx PL 2017: https://www.youtube.com/embed/4-4ahz7zDiQ
Domain Driven Design (DDD) is a topic that's been gaining a lot of popularity in both the Java and .NET camps recently. Entities, value types, repositories, bounded contexts and anti-corruption layers -- find out what all the buzz is about, and how establishing a domain model can help you combat complexity in your code.
Richard Dingwall is a .NET developer and blogger with a passion for architecture and maintainable code.
He is currently working at Provoke Solutions as lead developer on a six-month project introducing test-driven development (TDD) and domain-driven design (DDD) to a large ASP.NET ERP system.
An hour-long talk given at Wellington .NET user group, Sept 23 2009.
The document discusses the Hexagonal Architecture pattern, also known as Ports and Adapters. It describes the key components of the pattern - the hexagon representing the core business logic, ports that define the application's boundaries, actors that interact with ports, and adapters that interface between ports and external technologies. The benefits are flexibility to changing technologies through decoupling via adapters, and ability to delay technological decisions until later. Potential downsides include increased complexity from many explicit modules and dependencies to manage the separation of concerns.
The document discusses Clean Architecture, an architectural pattern for software design. It aims to facilitate maintainability, technical agility, and independent development. Clean Architecture prescribes separating an application into distinct layers - entities, use cases, interfaces, and entry points. This separation aims to make codebases independent of frameworks and easily testable. The document outlines principles like SOLID and DRY, and patterns like layered architecture and MVC that influence Clean Architecture. It provides tips for migrating existing applications to this architecture.
Over the last year there has been a lot of buzz about Clean Architecture in the Android community, but what is Clean Architecture? How does it work? And should I be using it? Recently at Badoo we decided to rewrite our messenger component.
Over the years this core piece of functionality in our app has become large and unwieldy. We wanted to take a fresh approach to try and prevent this from happening again. We choose to use Clean Architecture to achieve our goal. This talk intends to share our journey from theory to implementation in an application with over 100 million downloads. By the end, you should not only understand what Clean Architecture is, but how to implement it, and whether you should.
The document discusses refactoring code towards a domain-driven design approach. It notes that over time, as more features are added and teams grow, code becomes more complex without design. Domain-driven design is presented as a way to refactor code through techniques like defining a ubiquitous language, identifying domain models, isolating domains with bounded contexts, and expressing state changes with events. Refactoring requires prioritization and "boyscout refactoring" of cleaning up small pieces of code litter. The document advocates for seeing the benefits of refactoring without having to fully adopt every aspect of domain-driven design or drink the "kool-aid." Consistency is important when refactoring.
This document discusses the principles and structure of Clean Architecture for ASP.NET Core applications. It recommends separating an application into projects for the core domain logic, infrastructure implementation, and user interface. The core project defines interfaces that outer projects implement, avoiding direct dependencies. This allows for independence of frameworks, databases, and user interfaces. The document provides examples of project structure and responsibilities, and resources for further learning clean architecture principles.
DDD Tactical Design with Clean Architecture - Ivan PaulovichIvan Paulovich
The document discusses tactical design and clean architecture. It begins with an introduction of the speaker and then defines tactical design as applying design patterns and building blocks within a bounded context to enrich the domain model in a hands-on way. It then defines clean architecture as having patterns, principles, and practices with classes and modules that follow principles of dependency inversion, stable abstractions, and stable dependencies. The rest of the document provides examples of tactical design and clean architecture concepts like entities, value objects, aggregates, and domain-driven design patterns.
Lieven DOCLO gave a presentation on implementing Clean Architecture. Clean Architecture advocates separating domains, applications, and interfaces into separate layers. This allows the inner layers to be independent of the outer layers and frameworks. The presentation demonstrated creating building-related use cases and domain models, implementing repositories, and exposing use cases through REST endpoints. It discussed issues like decoupling tradeoffs, pragmatic compromises, and applying Clean Architecture to legacy projects.
A Journey from Hexagonal Architecture to Event Sourcing - SymfonyCon Cluj 2017Carlos Buenosvinos
1) The document describes the evolution of an architecture from a "Spaghetti Architecture" to using Event Sourcing and CQRS. It outlines a maturity model with 6 levels: from Spaghetti to Hexagonal to adding Domain Events to using CQRS as a stepping stone to full Event Sourcing and CQRS.
2) As the architecture evolved through each level, it improved separation of concerns, testability, and addressed new issues like complexity and performance. Domain Events were added to help decompose tasks and sync events. CQRS was introduced to improve performance of read models.
3) Fully implementing Event Sourcing would involve entities being reconstituted from stored events rather than loaded from a
The document discusses the principles of clean architecture. It states that clean architecture aims to minimize human effort required to build and maintain software systems. It emphasizes that the core of an application should be its use cases rather than technical details like databases or frameworks. The architecture should clearly communicate the intent of the system. It also notes that dependencies should flow inward from outer layers like interfaces to inner layers containing core business logic and entities.
GraphQL is a specification created by Facebook that defines a query language for fetching data from backend services. It allows clients to request specific data fields from a server in a hierarchical manner and receive only the requested data. GraphQL queries are strongly typed and introspective, allowing clients to understand the structure of the returned data. While still in draft form, GraphQL is used in production by Facebook's mobile apps and provides advantages over traditional REST APIs by being more product-centric and client-driven.
Clean architecture - Protecting the DomainVictor Rentea
The goal of architecture is to simplify the most complex parts of your logic. Any other goal should be secondary to this. The problem is that you can’t always anticipate where the complexity of your application will accumulate, especially when confronted with ever-changing requirements. The only way to keep your code simple is to gradually evolve the architecture without adding useless complexity up front, but always looking out for opportunities to break-down and refactor towards the most simple design that solves the problem. Drawing concepts from the Domain-Driven Development mindset, this talk summarizes the most important lessons learned designing and consulting many real-world projects. Along the way, you’ll hear about Value Objects and Entities, DTOs, Dependency Inversion Principle, Facades, the Onion Architecture and many pragmatic tips and tricks immediately applicable to your day-to-day work.
Domain Driven Design (DDD) is a software development approach that focuses on modeling a complex domain into code. The document discusses key DDD concepts like entities, value objects, aggregates, repositories, bounded contexts, and validation. It provides examples of how these concepts are implemented in code and outlines challenges and situations where DDD may not be appropriate, such as for non-complex domains without behavior/logic or where the data model maps directly to a relational database schema.
We like the architecture of our applications to revolve around the business logic, not around technical details (and especially not around the database).
In my team at Sky Network Services we use the Clean Architecture and it has given us a great deal of benefits: the business logic is explicit, we are free to change our technical decisions, the app is easy to test, working on it is faster and scalable, it’s hard to do the wrong thing, and many more.
But it comes at a cost, of course. In this talk I’ll tell you the story of our experience with Clean Architecture and give you some tips to get the most out of it.
Example Project
https://github.com/mattia-battiston/clean-architecture-example
Downloads
Online: https://goo.gl/DTxftJ
PDF: https://goo.gl/ZAtdBN
Powerpoint: https://goo.gl/D54wdZ (but you need to install these fonts to see it properly: https://goo.gl/iH8SO5)
Develop, deploy, and operate services at reddit scale oscon 2018Gregory Taylor
The last few years have been a period of tremendous growth for Reddit. Process, tooling, and culture have all had to adapt to an organization that has tripled in size and ambition. Greg Taylor discusses Reddit's evolution and explains how one of the world’s busiest sites develops, deploys, and operates services at significant scale.
Presented at OSCON 2018 in Portland, Oregon
LAS16-108: JerryScript and other scripting languages for IoTLinaro
LAS16-108: JerryScript and other scripting languages for IoT
Speakers: Paul Sokolovsky
Date: September 26, 2016
★ Session Description ★
Overview of small-size/low-resource VHLL (very high-level languages)/scripting languages available for embedded/IoT usage (JavaScript, Python, Lua, etc.). Typical/possible usage scenarios and benefits. Challenges of running VHLLs in deeply embedded/very resource-constrained environments. Progress reports on porting JerryScript to Zephyr. (Possibly, architecture comparison of JerryScript and MicroPython).
★ Resources ★
Etherpad: pad.linaro.org/p/las16-108
Presentations & Videos: http://connect.linaro.org/resource/las16/las16-108/
★ Event Details ★
Linaro Connect Las Vegas 2016 – #LAS16
September 26-30, 2016
http://www.linaro.org
http://connect.linaro.org
This document discusses clean architecture principles for mobile applications. It describes common iOS code smells like god view controllers and tightly coupled code. The document introduces SOLID principles to improve code quality and testability. It then outlines architectural layers including entities, use cases, interface adapters, and frameworks. The layers are arranged based on the dependency rule, where inner layers do not depend on outer ones. Specific patterns like MVC, MVP, MVVM, VIPER and repositories are presented for each layer. The document emphasizes designing applications that are decoupled from frameworks and user interfaces to improve reusability and flexibility.
Clean Architecture Essentials - Stockholm Software CraftsmanshipIvan Paulovich
About the talk:
Software Architecture is not about picking frameworks then gluing the pieces together! Let's dig into a software implementation designed to support the use cases, we will learn how to make the use cases a standalone component and see how a good architecture allows major decisions to be deferred. We will discuss component coupling and cohesion during the development timeline. Is your application architecture a Web Application? Are your tests taking too long to run? You will learn how to make the delivery mechanism an irrelevant and testable detail.
About the speaker:
Ivan Paulovich is an Agile .NET developer that enjoy solutions based on use cases and decoupled from technology details. Active on GitHub he supports OSS about Domain-Driven Design, TDD, Event Sourcing, CQRS, SOLID and Microservices. Microsoft MVP Reconnect. Checkout @ivanpaulovich on GitHub.
2012 the clean architecture by Uncle bob GEORGE LEON
The document discusses the Clean Architecture, which separates a software system into concentric circles or layers to achieve separation of concerns. The inner circles contain general high-level business rules and logic, while the outer circles contain mechanisms and frameworks. The key rule is that dependencies can only point inward - outer layers cannot depend on inner layers. This allows the system to be independent of frameworks, testable without external elements, and independent of interfaces like the UI or database. Data crossing boundaries is simplified to avoid dependencies between layers. Adhering to these principles creates a system that is intrinsically testable and able to replace obsolete external parts with minimal effort.
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Steve Pember
In this presentation we will present the general philosophy of Clean Architecture, Hexagonal Architecture, and Ports & Adapters: discussing why these approaches are useful and general guidelines for introducing them to your code. Chiefly, we will show how to implement these patterns within your Spring (Boot) Applications. Through a publicly available reference app, we will demonstrate what these concepts can look like within Spring and walkthrough a handful of scenarios: isolating core business logic, ease of testing, and adding a new feature or two.
The document discusses implementing Clean Architecture on Android apps. It describes challenges with traditional architectures like MVP where business logic is mixed with views. Clean Architecture separates concerns into layers - presentation, domain, and data. This makes apps easier to understand, maintain, and test. The domain and presentation layers are independent of frameworks, allowing flexibility. Testing can target each layer individually using tools like Espresso, JUnit, and Mockito. Overall Clean Architecture improves testability and decouples the codebase.
Clean Pragmatic Architecture - Avoiding a MonolithVictor Rentea
Talk built based on several of my trainings: http://www.victorrentea.ro/#training
Covers: Clean/Onion/Hexagonal Architecture, Domain Entities, Value Objects, Repository, Extract When it Grows Principle, Dependency Inversion Principle, Clean Code and Design Patterns.
These are the backing slides of the talks given at JPoint 2017 and Devoxx PL 2017: https://www.youtube.com/embed/4-4ahz7zDiQ
Domain Driven Design (DDD) is a topic that's been gaining a lot of popularity in both the Java and .NET camps recently. Entities, value types, repositories, bounded contexts and anti-corruption layers -- find out what all the buzz is about, and how establishing a domain model can help you combat complexity in your code.
Richard Dingwall is a .NET developer and blogger with a passion for architecture and maintainable code.
He is currently working at Provoke Solutions as lead developer on a six-month project introducing test-driven development (TDD) and domain-driven design (DDD) to a large ASP.NET ERP system.
An hour-long talk given at Wellington .NET user group, Sept 23 2009.
The document discusses the Hexagonal Architecture pattern, also known as Ports and Adapters. It describes the key components of the pattern - the hexagon representing the core business logic, ports that define the application's boundaries, actors that interact with ports, and adapters that interface between ports and external technologies. The benefits are flexibility to changing technologies through decoupling via adapters, and ability to delay technological decisions until later. Potential downsides include increased complexity from many explicit modules and dependencies to manage the separation of concerns.
The document discusses Clean Architecture, an architectural pattern for software design. It aims to facilitate maintainability, technical agility, and independent development. Clean Architecture prescribes separating an application into distinct layers - entities, use cases, interfaces, and entry points. This separation aims to make codebases independent of frameworks and easily testable. The document outlines principles like SOLID and DRY, and patterns like layered architecture and MVC that influence Clean Architecture. It provides tips for migrating existing applications to this architecture.
Over the last year there has been a lot of buzz about Clean Architecture in the Android community, but what is Clean Architecture? How does it work? And should I be using it? Recently at Badoo we decided to rewrite our messenger component.
Over the years this core piece of functionality in our app has become large and unwieldy. We wanted to take a fresh approach to try and prevent this from happening again. We choose to use Clean Architecture to achieve our goal. This talk intends to share our journey from theory to implementation in an application with over 100 million downloads. By the end, you should not only understand what Clean Architecture is, but how to implement it, and whether you should.
The document discusses refactoring code towards a domain-driven design approach. It notes that over time, as more features are added and teams grow, code becomes more complex without design. Domain-driven design is presented as a way to refactor code through techniques like defining a ubiquitous language, identifying domain models, isolating domains with bounded contexts, and expressing state changes with events. Refactoring requires prioritization and "boyscout refactoring" of cleaning up small pieces of code litter. The document advocates for seeing the benefits of refactoring without having to fully adopt every aspect of domain-driven design or drink the "kool-aid." Consistency is important when refactoring.
This document discusses the principles and structure of Clean Architecture for ASP.NET Core applications. It recommends separating an application into projects for the core domain logic, infrastructure implementation, and user interface. The core project defines interfaces that outer projects implement, avoiding direct dependencies. This allows for independence of frameworks, databases, and user interfaces. The document provides examples of project structure and responsibilities, and resources for further learning clean architecture principles.
DDD Tactical Design with Clean Architecture - Ivan PaulovichIvan Paulovich
The document discusses tactical design and clean architecture. It begins with an introduction of the speaker and then defines tactical design as applying design patterns and building blocks within a bounded context to enrich the domain model in a hands-on way. It then defines clean architecture as having patterns, principles, and practices with classes and modules that follow principles of dependency inversion, stable abstractions, and stable dependencies. The rest of the document provides examples of tactical design and clean architecture concepts like entities, value objects, aggregates, and domain-driven design patterns.
Lieven DOCLO gave a presentation on implementing Clean Architecture. Clean Architecture advocates separating domains, applications, and interfaces into separate layers. This allows the inner layers to be independent of the outer layers and frameworks. The presentation demonstrated creating building-related use cases and domain models, implementing repositories, and exposing use cases through REST endpoints. It discussed issues like decoupling tradeoffs, pragmatic compromises, and applying Clean Architecture to legacy projects.
A Journey from Hexagonal Architecture to Event Sourcing - SymfonyCon Cluj 2017Carlos Buenosvinos
1) The document describes the evolution of an architecture from a "Spaghetti Architecture" to using Event Sourcing and CQRS. It outlines a maturity model with 6 levels: from Spaghetti to Hexagonal to adding Domain Events to using CQRS as a stepping stone to full Event Sourcing and CQRS.
2) As the architecture evolved through each level, it improved separation of concerns, testability, and addressed new issues like complexity and performance. Domain Events were added to help decompose tasks and sync events. CQRS was introduced to improve performance of read models.
3) Fully implementing Event Sourcing would involve entities being reconstituted from stored events rather than loaded from a
The document discusses the principles of clean architecture. It states that clean architecture aims to minimize human effort required to build and maintain software systems. It emphasizes that the core of an application should be its use cases rather than technical details like databases or frameworks. The architecture should clearly communicate the intent of the system. It also notes that dependencies should flow inward from outer layers like interfaces to inner layers containing core business logic and entities.
GraphQL is a specification created by Facebook that defines a query language for fetching data from backend services. It allows clients to request specific data fields from a server in a hierarchical manner and receive only the requested data. GraphQL queries are strongly typed and introspective, allowing clients to understand the structure of the returned data. While still in draft form, GraphQL is used in production by Facebook's mobile apps and provides advantages over traditional REST APIs by being more product-centric and client-driven.
Clean architecture - Protecting the DomainVictor Rentea
The goal of architecture is to simplify the most complex parts of your logic. Any other goal should be secondary to this. The problem is that you can’t always anticipate where the complexity of your application will accumulate, especially when confronted with ever-changing requirements. The only way to keep your code simple is to gradually evolve the architecture without adding useless complexity up front, but always looking out for opportunities to break-down and refactor towards the most simple design that solves the problem. Drawing concepts from the Domain-Driven Development mindset, this talk summarizes the most important lessons learned designing and consulting many real-world projects. Along the way, you’ll hear about Value Objects and Entities, DTOs, Dependency Inversion Principle, Facades, the Onion Architecture and many pragmatic tips and tricks immediately applicable to your day-to-day work.
Domain Driven Design (DDD) is a software development approach that focuses on modeling a complex domain into code. The document discusses key DDD concepts like entities, value objects, aggregates, repositories, bounded contexts, and validation. It provides examples of how these concepts are implemented in code and outlines challenges and situations where DDD may not be appropriate, such as for non-complex domains without behavior/logic or where the data model maps directly to a relational database schema.
We like the architecture of our applications to revolve around the business logic, not around technical details (and especially not around the database).
In my team at Sky Network Services we use the Clean Architecture and it has given us a great deal of benefits: the business logic is explicit, we are free to change our technical decisions, the app is easy to test, working on it is faster and scalable, it’s hard to do the wrong thing, and many more.
But it comes at a cost, of course. In this talk I’ll tell you the story of our experience with Clean Architecture and give you some tips to get the most out of it.
Example Project
https://github.com/mattia-battiston/clean-architecture-example
Downloads
Online: https://goo.gl/DTxftJ
PDF: https://goo.gl/ZAtdBN
Powerpoint: https://goo.gl/D54wdZ (but you need to install these fonts to see it properly: https://goo.gl/iH8SO5)
Develop, deploy, and operate services at reddit scale oscon 2018Gregory Taylor
The last few years have been a period of tremendous growth for Reddit. Process, tooling, and culture have all had to adapt to an organization that has tripled in size and ambition. Greg Taylor discusses Reddit's evolution and explains how one of the world’s busiest sites develops, deploys, and operates services at significant scale.
Presented at OSCON 2018 in Portland, Oregon
LAS16-108: JerryScript and other scripting languages for IoTLinaro
LAS16-108: JerryScript and other scripting languages for IoT
Speakers: Paul Sokolovsky
Date: September 26, 2016
★ Session Description ★
Overview of small-size/low-resource VHLL (very high-level languages)/scripting languages available for embedded/IoT usage (JavaScript, Python, Lua, etc.). Typical/possible usage scenarios and benefits. Challenges of running VHLLs in deeply embedded/very resource-constrained environments. Progress reports on porting JerryScript to Zephyr. (Possibly, architecture comparison of JerryScript and MicroPython).
★ Resources ★
Etherpad: pad.linaro.org/p/las16-108
Presentations & Videos: http://connect.linaro.org/resource/las16/las16-108/
★ Event Details ★
Linaro Connect Las Vegas 2016 – #LAS16
September 26-30, 2016
http://www.linaro.org
http://connect.linaro.org
Introduction to DevOps and the Practical Use Cases at Credit OKKriangkrai Chaonithi
The document provides an introduction to DevOps and practical use cases. It discusses what DevOps is, why it is popular, the skills required of DevOps engineers, and common DevOps technologies like version control, CI/CD pipelines, containers, and monitoring. It also summarizes Credit OK's use of DevOps practices like Docker, Kubernetes, and GitLab CI/CD pipelines for their credit scoring platform. Finally, it outlines some modern obstacles in software development and concludes that DevOps can help ensure quality, improve productivity, and automate infrastructure through practices like continuous integration, containerization, and logging/monitoring.
This document discusses the journey to cloud computing and cloud native applications. It covers evolving from on-premise servers and monolithic applications to distributed architectures like microservices, containers, and serverless functions. The key steps are assessing applications to determine readiness, prioritizing workloads based on business value, and establishing centers of excellence to help teams migrate applications incrementally through pilots while learning from others' experiences. The goal is to maximize cloud advantages like elastic scaling and continuous delivery while navigating technical challenges along the path to cloud native.
The document discusses software architecture and design principles for organizing code into classes and components. It recommends using domain-driven design principles like bounded contexts to logically separate code and control the scope of changes. Specific approaches are suggested like using hexagonal architecture with separate domains, applications, and frameworks. The document also discusses balancing principles with pragmatism like avoiding perfection to get working code faster and managing technical debt.
The document discusses component interface design. It defines an interface and contrasts an API approach with a protocol approach. It provides examples of common bad interface practices like deceptive APIs and DSLs as APIs. It also discusses issues with distributed systems like idempotency keys and the coupling spectrum. The document emphasizes designing error messages for the caller and distinguishing component purpose from implementation.
Javascript Programming according to Industry Standards.pptxMukundSonaiya1
Workshop by Foster that helps students to get a glance on how javascript programming is done today in industry taking care of some important industry standards.
One of the main hindrances to teams being able to respond rapidly to new features are technical problems resulting from bad coding practices, also known as technical debt. Melissa and Brett will cover Agile tools and practices that help development teams write better code and increase maintainability. Topics that will be covered include:
Pair programming
Automated Unit Testing
Refactoring
Test-Driven Development
Agile Architecture
Data Science in Production: Technologies That Drive Adoption of Data Science ...Nir Yungster
Critical to a data science team’s ability to drive impact is its effectiveness in incorporating its solutions into new or existing products. When collaborating with other engineering teams, and especially when solutions must operate at scale, technological choices can be critical factors in determining what type of outcome you'll have. We walk through strategies and specific technologies - Airflow, Docker, Kubernetes - that can help promote successful collaboration between data science and engineering.
From prototype to production - The journey of re-designing SmartUp.ioMáté Lang
Talk about the joureny of small tech team re-designing SmartUp.io from scratch, and the technical paths from MVP to Production.
High level overview of architecture and tech stack decisions, best-practices and culture.
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...Databricks
Bighead is Airbnb's machine learning infrastructure that was created to:
- Standardize and simplify the ML development workflow;
- Reduce the time and effort to build ML models from weeks/months to days/weeks; and
- Enable more teams at Airbnb to utilize ML.
It provides shared services and tools for data management, model training/inference, and model management to make the ML process more efficient and production-ready. This includes services like Zipline for feature storage, Redspot for notebook environments, Deep Thought for online inference, and the Bighead UI for model monitoring.
Bighead is Airbnb's machine learning infrastructure that was created to:
1) Standardize and simplify the ML development workflow;
2) Reduce the time and effort to build ML models from weeks/months to days/weeks; and
3) Enable more teams at Airbnb to utilize ML.
It provides services for data management, model training/scoring, production deployment, and model management to make the ML process more efficient and consistent across teams. Bighead is built on open source technologies like Spark, TensorFlow, and Kubernetes but addresses gaps to fully support the end-to-end ML pipeline.
This document outlines the agenda and content for a code session on microservices. It will cover:
- An overview of microservices architecture and attributes
- Service discovery using Consul and a demo
- Protocol Buffers for data serialization and an example
- RPC and Google's gRPC with an example
- The structure of services at Yotpo and the workflow for creating a new service
- Shared utilities for services including service discovery and logging
- Deployment using Makefiles and Travis
- A live demo of creating a new microservice
This document discusses micro optimizations in C++ and their effectiveness. It begins by defining micro optimizations and noting that the real bottlenecks are often not within one's own code. It then discusses reasons both for and against micro optimizations, noting they can improve performance if used judiciously but also complicate code. The document covers measuring efficiency and complications that arise in C, C++ and higher-level languages. It emphasizes the importance of understanding what languages do behind the scenes and focusing optimizations on the "fast path" code used most frequently.
APIDays SF 2019: Managing multiple api stacks on serverlessAlexander Graebe
This document discusses managing multiple API stacks on serverless architectures. It recommends decoupling core data and processing from interface specifics as much as possible, and decoupling from the cloud platform. It also recommends using versioning independently of interfaces, aligning private and public interfaces conceptually, and getting insights before production. The document outlines an iterative process for interface development including conceptualizing, specifying, documenting, implementing, and demonstrating. It stresses respecting guidelines for specific interfaces and adopting standards.
The document discusses the evolution of agile teams from having no tests to implementing behavior-driven development and domain-driven design using Behat acceptance tests. It provides examples of using Behat scenarios to drive the development of a domain model for a messaging system without frameworks or controllers. The benefits are a simple, framework-agnostic domain model that is easy to understand and test and separates business logic from the user interface layers.
SACON NY 19: "Creating an effective developer experience for cloud-native apps"Daniel Bryant
Many organizations are embracing cloud-native technologies, such as microservices, containers, and Kubernetes, but are struggling to adapt their developer experience (DevEx or DX) and continuous delivery processes. Failure to adapt leads to longer lead times for delivery, frustration for developers, and stability issues in production. Architects and technical leaders need to drive this change.
The developer experience with modern cloud-native technologies is very different than the classic enterprise experience of the 1990s or even the early cloud experiences of the 2000s. For example, it’s often no longer possible to spin up an entire application or system on local hardware, and the extra layers of abstract of containers and VMs make debugging and observing systems more challenging.
Daniel Bryant explores the core concepts of the cloud-native developer experience, introduces and compares several useful tools, and shares lessons learned from the trenches.
How Can Hiring A Mobile App Development Company Help Your Business Grow?ToXSL Technologies
ToXSL Technologies is an award-winning Mobile App Development Company in Dubai that helps businesses reshape their digital possibilities with custom app services. As a top app development company in Dubai, we offer highly engaging iOS & Android app solutions. https://rb.gy/necdnt
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfVALiNTRY360
Salesforce Healthcare CRM, implemented by VALiNTRY360, revolutionizes patient management by enhancing patient engagement, streamlining administrative processes, and improving care coordination. Its advanced analytics, robust security, and seamless integration with telehealth services ensure that healthcare providers can deliver personalized, efficient, and secure patient care. By automating routine tasks and providing actionable insights, Salesforce Healthcare CRM enables healthcare providers to focus on delivering high-quality care, leading to better patient outcomes and higher satisfaction. VALiNTRY360's expertise ensures a tailored solution that meets the unique needs of any healthcare practice, from small clinics to large hospital systems.
For more info visit us https://valintry360.com/solutions/health-life-sciences
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Łukasz Chruściel
No one wants their application to drag like a car stuck in the slow lane! Yet it’s all too common to encounter bumpy, pothole-filled solutions that slow the speed of any application. Symfony apps are not an exception.
In this talk, I will take you for a spin around the performance racetrack. We’ll explore common pitfalls - those hidden potholes on your application that can cause unexpected slowdowns. Learn how to spot these performance bumps early, and more importantly, how to navigate around them to keep your application running at top speed.
We will focus in particular on tuning your engine at the application level, making the right adjustments to ensure that your system responds like a well-oiled, high-performance race car.
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
Hand Rolled Applicative User ValidationCode KataPhilip Schwarz
Could you use a simple piece of Scala validation code (granted, a very simplistic one too!) that you can rewrite, now and again, to refresh your basic understanding of Applicative operators <*>, <*, *>?
The goal is not to write perfect code showcasing validation, but rather, to provide a small, rough-and ready exercise to reinforce your muscle-memory.
Despite its grandiose-sounding title, this deck consists of just three slides showing the Scala 3 code to be rewritten whenever the details of the operators begin to fade away.
The code is my rough and ready translation of a Haskell user-validation program found in a book called Finding Success (and Failure) in Haskell - Fall in love with applicative functors.
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesQuickdice ERP
Explore the seamless transition to e-invoicing with this comprehensive guide tailored for Saudi Arabian businesses. Navigate the process effortlessly with step-by-step instructions designed to streamline implementation and enhance efficiency.
WWDC 2024 Keynote Review: For CocoaCoders AustinPatrick Weigel
Overview of WWDC 2024 Keynote Address.
Covers: Apple Intelligence, iOS18, macOS Sequoia, iPadOS, watchOS, visionOS, and Apple TV+.
Understandable dialogue on Apple TV+
On-device app controlling AI.
Access to ChatGPT with a guest appearance by Chief Data Thief Sam Altman!
App Locking! iPhone Mirroring! And a Calculator!!
SMS API Integration in Saudi Arabia| Best SMS API ServiceYara Milbes
Discover the benefits and implementation of SMS API integration in the UAE and Middle East. This comprehensive guide covers the importance of SMS messaging APIs, the advantages of bulk SMS APIs, and real-world case studies. Learn how CEQUENS, a leader in communication solutions, can help your business enhance customer engagement and streamline operations with innovative CPaaS, reliable SMS APIs, and omnichannel solutions, including WhatsApp Business. Perfect for businesses seeking to optimize their communication strategies in the digital age.
2. Allow an application to equally be driven by users, programs,
automated test, and to be developed and tested in isolation from
its eventual run-time devices and databases.
Intent
3. ● Clean Architecture
● Ports/Adapters
● Left wing side/right side
● Domain-driven design
● Evolutive architecture / VIPER…
Other similar
architectures/buzzwords?
HEXAGONAL ARCHITECTURE
4. How does the kitchen of a chef look like?
Why do we need it?
5. How does the kitchen of a chef look like?
Why do we need it?
Image from Shutterstock here
6. Software is a living creature that needs to
Why do we need a good architecture?
Be maintainable
Evolve
Do several similar and very different things
Be flexible
Be testable Self explanatory
7. ● Put the software at the service of the business.
● Technology is a detail, business is what matters.
● Can your PO read your tests or your code and understands what it does ?
● Push for independence of the business area from the technology infrastructure
● Make it easy to evolve
● Allow re-usability
What is the goal of the Hexagonal
Architecture?
8. How is the Hexagonal Architecture
working?
● Separate the Domain - Business from the rest
14. How is the Hexagonal Architecture
working?
● Users / Application:
○ What is provided to the end user of our domain
○ They need us
● Providers / Infrastructure:
○ What we depend on
15. How is the Hex-Archi working for instance
for us?
16. How is the Hex-Archi working for instance
for us?
At compile time:
18. How is the Hex-Archi working for instance
for us?
At runtime:
public class Program {
public static void Main(String[] args)
{
// 1. Instantiate right-side adapter ("Infrastructure most likely in our case")
// What we depend on
SomeOtherPort infraAdapter = new SomeKindOfAdapter("argument");
// 2. Instantiate the Domain
// Our business logic
ISomePort domain = new LogicThanImplementSomePort(infraAdapter);
// 3. Instantiate the application side
// What our users depend on
SomeRestController controller = new SomeRestController(domain);
}
}
19. Details
● Ports:
○ Interfaces
○ Contract to respect for adapter
● Adapters:
○ Implement interfaces
○ Are interchangeables
○ Are throwable
○ Are mockable
● Example:
○ Replace PostgreSQL by Oracle → no impact on the domain
○ Replace RabbitMQ by Kafka →
20. Details
● Domain:
○ Should use domain language only
○ Should be easy to unit test
○ Could have easily implemented behaviour driven test
○ Could be Domain-driven designed
○ MUST not have any dependency on other parts of the application
○ Lean on Dependency Injection and pass only interfaces
21. Details
● Testing Strategy:
○ Mock / stub / fake your infrastructure adapters
○ Test the whole domain independently of infrastructure or application
○ Can test: Application → Domain
○ Can test: Domain → Infrastructure
○ MUST STILL test infrastructure and application parts
23. BUT ...
● Beware:
○ Your database model isn’t your domain model.
○ You don’t start designing your db to build your domain model
● Challenge yourself:
○ Can your PO/PM write the BDD test for you and read your code and understand it? If yes:
congrats, your architecture should be quite neat and be able to evolve.
○ Embrace changes, to do so you will have to improve your code base and architecture
○ Self discipline
24. TIPS ...
● Multi module projects with right dependencies
● Define your domain language to align everybody
● Ask yourself:
○ Is your code easily testable ?
○ Does it use heavily mocks ? → could be a bad smell
○ Are your decisions reversible? They should be
● The less modules/packages and your code is coupled the better you’ll be
● You want to use different technologies for Application/domain/infra → DO IT, you can, don‘t
base your architecture on the language you use
26. Annexe and content we took ideas from
● https://fr.slideshare.net/nicolascarlo1/hexagonal-architecture-elixir
● https://fr.slideshare.net/ThomasPierrain/coder-sans-peur-du-changement-avec-la-meme-pas-mal-hexagonal-architecture
● https://blog.octo.com/en/hexagonal-architecture-three-principles-and-an-implementation-example/
● https://fr.slideshare.net/nicolascarlo1/the-secrets-of-hexagonal-architecture