Victor Rentea

Trainer and Consultant
With 20 years of experience, Victor Rentea (@VictorRentea) is a Java Champion who dedicated his career to training and inspiring thousands of engineers in over 150 companies worldwide. Based on the lessons learned from the trenches, he gave many top-rated talks at conferences in Europe and online. You can meet Victor online at his monthly events for European Software Crafters, the world’s largest community on improving code quality.

Workshop topic:
Software Architecture

Time & Date:
April 20th & 21st, online | 9am-5pm CEST

This workshop explores the key design decisions in the architecture of a backend system and studies their pros/cons. With a pragmatic attitude, we learn how to progressively introduce boundaries in our design to reduce the code complexity despite accumulating features. Along our journey we discover fundamental design principles, and we brainstorm the mainstream backend architecture styles: Layers, Hexagonal, Onion and Modulith. The concepts are put in practice by refactoring 2 sample Java applications while keeping the Java/framework specifics to a minimum.

After this workshop you will be able to:

  • Develop a firm understanding of the core architectural principles.
  • Learn to analyze tradeoffs of design decisions.
  • Master the state-of-the-art backend architectural styles.
  • Implement architectural changes incrementally, without large, risky rewrites.

This workshop is for you if:

  • You are a developer (in any programming language) looking to grow into an architect.
  • You are an architect / technical coach that wants an update on current trends in architectures.
  • You are looking to debate design decisions in your codebase.

Agenda:

Fundamentals

  • The 3 Laws of Architecture
  • Architectural Decision Records (ADR)
  • Architecture Fitness Functions
  • Diagrams best practices, C4 Model, tools

Domain Modeling  (from Domain-Driven Design)

  • Domain-Driven Design (DDD): Ubiquitous Language/Bounded Context, Collaboration, Exploration, Distillation
  • Deep Domain Model with Value Objects
  • Rich Domain Model with behavior and domain constraints
  • Axis of Code Complexity: Cyclomatic, Orchestration, and Data Semantics
  • Exercise: refactoring to a Rich Domain Model

Agnostic Domain protecting core logic

  • Adapter Pattern, Anti-Corruption Layer and Dependency Inversion
  • Enforce design boundaries with ArchUnit tests and/or compiler
  • Exercise: extract infrastructure from core logic 

Layered Architecture

  • Open vs Closed Layer
  • Ways to Split Complexity: SRP(Horizontal or Vertical), or for Reuse (DRY)
  • Separation by Layers of Abstraction (SLAb)

Hexagonal Architecture aka Ports-and-Adapters

  • Dogmatic Version (*hexagonal arch talk in the prep)
  • Rules of a Clean Architecture by Robert C. Martin (aka Uncle Bob)
  • Lock-in to Libraries
  • Common Simplifications- when to relax the rules?
  • Hexagonal vs Layers- comparison
  • Hexagonal Failures- when not to use it?
  • (optional) Onion Architecture- brief comparison with Hexagonal
  • Vertical-Slice Architecture ("Anti-Layers") by Jimmy Bogard

 REST API Design

  • Breaking changes & API Versioning
  • Contract Tests
  • Contract- vs Code-first development
  • Performance: Batch APIs, aggregator service
  • CQRS - 3 levels
  • Automatic Mappers (like MapStruct)
  • Task-Based APIs & UIs
  • Error Handling

Modular Monolith Architecture

  • From Technical to Functional Partitioning
  • Module internal/external API
  • Options for Cross-module Query
  • Event-based Module Integration: sync-transacted, async, durable, external
  • Product Customization: feature toggles, Plugin Mechanism / SPI
  • 6 Module integration patterns
  • From packages to build modules (eg. Maven/Gradle)
  • Levels of data decoupling (optional)
  • Exercises refactoring a Spring Modulith application

Towards Microservices

  • Non-Functional Requirements (NFRs)
  • Weaknesses of Modulith
  • Why and How to extract a Module as a Microservice
  • Architectural Quantums: options between Monolith and Microservices

Side Topics usually covered along the way:

  • Coupling & Cohesion
  • Split by Volatility
  • Design Principles: SOLID, DRY, KISS, Beck's Rules of Simple Design
  • Evolutionary Architecture: when to invest more in design?
  • Dogmatic vs Pragmatic Architecture?
  • Domain Model vs ORM Model - unify or segregate?
  • DDD Aggregate Design - boundaries of consistency

* If you're interested in this program, please contact us at info@itkonekt.com to find out more about availability and prices.