Log In
0% completed
All Lessons
Free Lessons (5)
Before We Begin
Introduction
The Sample Application
What's Wrong with Layers?
Promotes Database-Driven Design
Prone to Shortcuts
Grows Hard to Test
Hides the Use Cases
Makes Parallel Work Difficult
Conclusion: What's Wrong with Layers?
Quiz: What's Wrong with Layers?
Inverting Dependencies
The Single Responsibility Principle
A Table about Side Effects
The Dependency Inversion Principle
Clean Architecture
Hexagonal Architecture
Conclusion: Inverting Dependencies
Quiz: Inverting Dependencies
Organizing Code
Organizing by Layer
Organizing by Feature
Architecturally Expressive Package Structure
The Role of Dependency Injection
Conclusion: Organizing Code
Quiz: Organizing Code
Implementing a Use Case
Implementing the Domain Model
A Use Case in a Nutshell
Validating Input
The Power of Constructors
Different Input Models for Different Use Cases
Validating Business Rules
Rich vs. Anemic Domain Model
Different Output Models for Different Use Cases
What About Read-Only Use Cases?
Conclusion: Implementing a Use Case
Quiz: Implementing a Use Case
Implementing a Web Adapter
Dependency Inversion with a Web Adapter
Responsibilities of a Web Adapter
Slicing Controllers
Conclusion: Implementing a Web Adapter
Quiz: Implementing a Web Adapter
Implementing a Persistence Adapter
Dependency Inversion with a Persistence Adapter
Responsibilities of a Persistence Adapter
Slicing Port Interfaces
Slicing Persistence Adapters
Example with Spring Data JPA
Database Transactions
Conclusion: Implementing a Persistence Adapter
Quiz: Implementing a Persistence Adapter
Testing Architecture Elements
The Test Pyramid
Testing a Domain Entity with Unit Tests
Testing a Use Case with Unit Tests
Testing a Web Adapter with Integration Tests
Testing a Persistence Adapter with Integration Tests
Testing Main Paths with System Tests
How Much Testing is Enough?
Conclusion: Testing Architecture Elements
Quiz: Testing Architecture Elements
Mapping Between Boundaries
The "No Mapping" Strategy
The "Two-Way" Mapping Strategy
The "Full" Mapping Strategy
The "One-Way" Mapping Strategy
When to Use Which Mapping Strategy?
Conclusion: Mapping Between Boundaries
Quiz: Mapping Between Boundaries
Assembling the Application
Why Even Care About Assembly?
Assembling via Plain Code
Assembling via Spring's Classpath Scanning
Assembling via Spring's Java Config
Conclusion: Assembling the Application
Quiz: Assembling the Application
Enforcing Architecture Boundaries
Boundaries and Dependencies
Visibility Modifiers
Post-Compile Checks
Build Artifacts
Conclusion: Enforcing Architecture Boundaries
Quiz: Enforcing Architecture Boundaries
Taking Shortcuts Consciously
Why Are Shortcuts Like Broken Windows?
The Responsibility of Starting Clean
Sharing Models between Use Cases
Using Domain Entities as an Input or Output Model
Skipping Incoming Ports
Skipping Application Services
Conclusion: Taking Shortcuts Consciously
Quiz: Taking Shortcuts Consciously
Course Assessment
Assessment
Conclusion
Deciding on an Architecture Style
Appendix
Appendix I
Hexagonal Software Architecture for Web Applications
/
...
/
Appendix I
Appendix I
We'll cover the following...
Deadline
BuckPal
Any dependency
Hexagonal source
Locking
30000 lines
JPA
Mystic
Shortcuts
Personality
Deadline
The word “deadline” probably
...