| 
									
										
										
										
											2017-02-11 21:46:56 +02:00
										 |  |  | <!--
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The MIT License | 
					
						
							|  |  |  |     Copyright (c) 2014 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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --> | 
					
						
							| 
									
										
										
										
											2016-11-12 22:44:08 +02:00
										 |  |  | <!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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-13 11:23:22 +02:00
										 |  |  | # Concepts | 
					
						
							| 
									
										
										
										
											2016-11-12 22:44:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-13 11:23:22 +02:00
										 |  |  | * 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 | 
					
						
							| 
									
										
										
										
											2016-11-12 22:44:08 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Concepts | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-13 11:23:22 +02:00
										 |  |  | * Adapters are interface implementations | 
					
						
							|  |  |  | * Typically different adapters for testing and production are provided | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Diagram | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .center[] | 
					
						
							| 
									
										
										
										
											2016-11-12 22:44:08 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Real world examples | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-13 11:23:22 +02:00
										 |  |  | * [Apache Isis](https://isis.apache.org/) builds generic UI and REST API directly from the underlying domain objects | 
					
						
							| 
									
										
										
										
											2016-11-12 22:44:08 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-13 11:23:22 +02:00
										 |  |  | # Tutorials | 
					
						
							| 
									
										
										
										
											2016-11-12 22:44:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-13 11:23:22 +02:00
										 |  |  | * Blog http://java-design-patterns.com/blog/build-maintainable-systems-with-hexagonal-architecture/ | 
					
						
							|  |  |  | * Source code http://java-design-patterns.com/patterns/hexagonal/ | 
					
						
							| 
									
										
										
										
											2016-11-12 22:44:08 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     </textarea> | 
					
						
							|  |  |  |     <script src="https://gnab.github.io/remark/downloads/remark-latest.min.js"> | 
					
						
							|  |  |  |     </script> | 
					
						
							|  |  |  |     <script> | 
					
						
							|  |  |  |       var slideshow = remark.create(); | 
					
						
							|  |  |  |     </script> | 
					
						
							|  |  |  |   </body> | 
					
						
							|  |  |  | </html> | 
					
						
							|  |  |  | 
 |