128 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!--
 | |
| 
 | |
|     The MIT License
 | |
|     Copyright © 2014-2019 Ilkka Seppälä
 | |
| 
 | |
|     Permission is hereby granted, free of charge, to any person obtaining a copy
 | |
|     of this software and associated documentation files (the "Software"), to deal
 | |
|     in the Software without restriction, including without limitation the rights
 | |
|     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | |
|     copies of the Software, and to permit persons to whom the Software is
 | |
|     furnished to do so, subject to the following conditions:
 | |
| 
 | |
|     The above copyright notice and this permission notice shall be included in
 | |
|     all copies or substantial portions of the Software.
 | |
| 
 | |
|     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
|     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
|     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | |
|     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | |
|     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | |
|     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | |
|     THE SOFTWARE.
 | |
| 
 | |
| -->
 | |
| <!DOCTYPE html>
 | |
| <html>
 | |
|   <head>
 | |
|     <title>Title</title>
 | |
|     <meta charset="utf-8">
 | |
|     <style>
 | |
|       @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
 | |
|       @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
 | |
|       @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);
 | |
| 
 | |
|       body { font-family: 'Droid Serif'; }
 | |
|       h1, h2, h3 {
 | |
|         font-family: 'Yanone Kaffeesatz';
 | |
|         font-weight: normal;
 | |
|       }
 | |
|       .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
 | |
|     </style>
 | |
|   </head>
 | |
|   <body>
 | |
|     <textarea id="source">
 | |
| 
 | |
| 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[]
 | |
| 
 | |
| ---
 | |
| 
 | |
| # 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/
 | |
| 
 | |
|     </textarea>
 | |
|     <script src="https://gnab.github.io/remark/downloads/remark-latest.min.js">
 | |
|     </script>
 | |
|     <script>
 | |
|       var slideshow = remark.create();
 | |
|     </script>
 | |
|   </body>
 | |
| </html>
 | |
| 
 |