| 
									
										
										
										
											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> | 
					
						
							|  |  |  | 
 |