Evolutionary architectural patterns with Clean and Hexagonal Architecture

2 Days

Dates and Booking

Description

This training helps you to recognize problems of layered architecture and provides you with a toolbox of exercises that you can use to implement clean and hexagonal architecture. After the training, you will be able to continuously test your architecture and apply the evolutionary architecture mindset.

When expanding existing systems, we repeatedly stumble across rigid architectures that cannot be expanded or even grown systems that no longer allow any expansion that matches the architecture, as there is no longer any recognizable architecture. As a result, the underlying business model can no longer evolve. But how can we prevent this scenario? How can we implement an architecture in our software system that can withstand the evolution of the system?

Both the Clean and the Hexagonal Architecture promise a clear separation of the functional domain from the infrastructural aspects. The core idea, the Ports and Adapters Pattern, is powerful and helps to realize technical, functional and organizational flexibility in the software architecture. Building on this, we will examine the Clean and Hexagonal Architectures in the context of Evolutionary Architecture and present implementation options for Fitness Functions for these architecture patterns.

In the training “Evolutionary Software Architecture” we will talk about similarities, differences, benefits, trade-offs and pragmatic development approaches for these architecture patterns. Using a demo application in Java, we will analyze code examples together and implement them ourselves using a functional example. We will use the building blocks of tactical domain-driven design and learn how to implement them embedded in the clean architecture. You will be given access to the demo application with Spring Boot and Java and will have the opportunity to study the topic in more depth afterwards.

Agenda

**Day 1

Software architecture as structure and methodology

  • Functional system decomposition and modularization
  • Architectural patterns, architectural principles, design patterns and pattern language
  • Time-to-adaptation and structural quality of software architecture

Ports & adapters as architectural patterns

  • The weaknesses of layered architecture
  • From layered architecture to ports & adapters architecture patterns

Creating an isolated domain

  • Implementation of business objects and specialized values according to the principle of the rich domain model
  • Implement domain-related data validation
  • Distribute different tasks to the class stereotypes Service, Root Entity, Entity and Value Object
  • Code exercise: Domain model

Hexagonal Architecture

  • Implementation of business objects and specialist values according to the principle of the rich domain model
  • Implement domain-related data validation
  • Distribute different tasks to the class stereotypes Service, Root Entity, Entity and Value Object
  • Code exercise: Domain model

Clean Architecture

  • The domain in the clean architecture
  • The use case ring of the clean architecture
  • Principles of the use case section
  • The framework ring of the clean architecture
  • Call flow through the clean architecture
  • Code exercise: Use case ring and framework ring

**Day 2

**Mapping strategies

  • One-way, two-way and full mapping strategy
  • Simplifying mappings with third-party libraries
  • Mappers, converters and factories
  • Code exercise: Two-way mapping strategy

Domain-Driven Modularization

  • Modularization with domain modules using root entities
  • Structuring domain modules
  • Design patterns for relationships between domain modules
  • Coding exercise: Dependencies between domain modules

**Evolutionary architecture

  • Motivation for architecture discipline based on the Broken Window Theory
  • The mindset of evolutionary architecture
  • Fitness Functions for Clean and Hexagonal Architecture
  • Coding exercise: Clean Architecture Fitness Functions with ArchUnit

Audience

This training is aimed at software architects and developers who want to understand these architectural patterns and their application in everyday project work. Participants should have the following experience and knowledge:

  • More than 12 months of practical experience in software development in a team of medium to large software systems.
  • Knowledge and practical experience in at least one high-level programming language (Java will be used for the course examples)
  • Familiar with layered architecture, SOLID principles, design patterns, dependency injection and modularization concepts (modules, packages, namespaces)
  • Familiar with the creation of domain-oriented object models in Java or a comparable programming language

Training Objectives

Recognize the problems of layered architecture and be able to address them using ports & adapters and functional modularization

Implement clean and hexagonal architecture and differentiate between these architectural patterns

Be able to apply different modularization variants and mapping strategies for the clean and hexagonal architecture

Be able to specifically use design patterns to map relationships between domain-oriented building blocks

Be able to continuously test your architecture using architecture tests and apply the evolutionary architecture mindset

Your Trainers

Matthias Eschhold

Matthias Eschhold

Architektur, Domain-driven Design

  • Evolutionary architectural patterns with Clean and Hexagonal Architecture

Matthias ist Lead-Architekt der E-Mobilität bei der EnBW AG. Mit seiner Erfahrung in der Softwarearchitektur und Domain-Driven Design gestaltet er mit seinem Team die IT-Landschaft und Team-Topologie der E-Mobilität. Trotz der Schwerpunkte auf strategischer und sozio-technischer Architekturebene, fühlt sich Matthias nach wie vor mit Java und Spring Boot auf der Codeebene zuhause, implementiert Prototypen und führt Refactorings durch. Seit vielen Jahren teilt Matthias seine Leidenschaft für Architektur als Trainer. Seine Stärke liegt in praxisnahen Schulungen, die nicht nur Architekturmuster und -prinzipien vermitteln, sondern auch die Realitäten von Projekten berücksichtigen. Er sucht stets nach Wegen, um Softwarearchitektur alltagstauglich zu machen.

In-House Training

You can also book this training as an in-house training course exclusively for your team. Please use the enquiry form for more details.

Enquire now

Relevant Other Training Courses