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 <br /> <br /> .center[![Alt text](layers.png)] --- # 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[![Alt text](ports_and_adapters.png)] --- # 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/