class: center, middle # Hexagonal Architecture --- # Also known as * Ports and Adapters * Clean Architecture * Onion Architecture --- # Layered architecture problems * No clear application core * Business logic leaks to the presentation layer
.center[] --- # Intent * Application can be driven by users, programs, automated test or batch scripts * Application can be developed and tested in isolation from its eventual run-time devices and databases --- # Applicability Use Hexagonal Architecture pattern * When the application needs to be independent of any frameworks * When it is important that the application highly maintainable and fully testable --- # Concepts * Ports are interfaces * The ports that drive the application are called primary ports * The ports that are driven by the application are called secondary ports --- # Concepts * Adapters are interface implementations * Typically different adapters for testing and production are provided --- # Diagram .center[] --- # Real world examples * [Apache Isis](https://isis.apache.org/) builds generic UI and REST API directly from the underlying domain objects --- # Tutorials * Blog http://java-design-patterns.com/blog/build-maintainable-systems-with-hexagonal-architecture/ * Source code http://java-design-patterns.com/patterns/hexagonal/