Merge pull request #519 from iluwatar/presentation
Add hexagonal architecture presentation
This commit is contained in:
commit
89e7f51e99
@ -23,15 +23,18 @@ Allow an application to equally be driven by users, programs, automated test or
|
||||
## Applicability
|
||||
Use Hexagonal Architecture pattern when
|
||||
|
||||
* it is important that the application is fully testable
|
||||
* you use Domain Driven Design methodology and/or Microservices architectural style
|
||||
* When the application needs to be independent of any frameworks
|
||||
* When it is important that the application highly maintainable and fully testable
|
||||
|
||||
## Tutorials
|
||||
* [Build Maintainable Systems With Hexagonal Architecture](http://java-design-patterns.com/blog/build-maintainable-systems-with-hexagonal-architecture/)
|
||||
|
||||
## Presentations
|
||||
* [Hexagonal Architecture](https://github.com/iluwatar/java-design-patterns/tree/master/hexagonal/etc/presentation.html)
|
||||
|
||||
## Real world examples
|
||||
|
||||
* [Apache Isis](https://isis.apache.org/)
|
||||
* [Apache Isis](https://isis.apache.org/) builds generic UI and REST API directly from the underlying domain objects
|
||||
|
||||
## Credits
|
||||
|
||||
|
BIN
hexagonal/etc/layers.png
Normal file
BIN
hexagonal/etc/layers.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
hexagonal/etc/ports_and_adapters.png
Normal file
BIN
hexagonal/etc/ports_and_adapters.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
1
hexagonal/etc/ports_and_adapters.xml
Normal file
1
hexagonal/etc/ports_and_adapters.xml
Normal file
@ -0,0 +1 @@
|
||||
<mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.90 Safari/537.36" version="6.0.1.3" editor="www.draw.io" type="device"><diagram name="Page-1">7Zpdk6I4FIZ/jbdbJAHEyx7nY/diqrqqd2tnLiOJSDUSK6ZHe3/9BkmUfFiDDqBM2TcNBwLxOe85nBOYoPl6/4XjzeorI7SYwIDsJ+jjBEKA4kj+qyzvtWUag9qQ8Zyok06Gl/w/qoyBsr7lhG6NEwVjhcg3pjFlZUlTYdgw52xnnrZkhXnXDc6oY3hJceFa/82JWNXWJApO9j9pnq30nUGgjixw+ppx9laq+00gWh7+6sNrrK+lzt+uMGG7hgl9mqA5Z0zUW+v9nBYVW42tHvf5zNHjvDktRZsBqB7wAxdvVM/4MC/xrlnIKW6qzRXd44yVE/RhQ3m+poLyk/X5ZPqwW+WCvmxwWo3aSYFI20qsC7kH5Ka6I+WC7s/OGhxZSI1RJi/N3+UpagBMFD4lL6D3dydnIa2lVcNRMFZGrASSHa99giQ3FCc/MzhKZmgaGcyOKBrMAPQwO2r7V5iFDrM549ThJgfJEKc/B7LMi2LOCsYP46oYg2kq7VvB2SttHCHxIo7ibhCGATARJshBqDNfk2AXoot+Lrpr4RFMk6UXXpwmdLHsCF5s6W/qwkMe+aEO4MW/GzwEPQmvJ3jT0cMDMxNeGA0GLxk7PDQ1H7VDKm82fnh2zoODwdPlz3jphdCUHoyGkx5oUeRdTS+iCQl99BK4QHFHxUoUWfQ89V5v9Fq0FXdOz9ZeMCC9Nk/ckjxVfa7cK1lJTWJ0n4tvje3vcjuotks5k2/Nne/6rJJ8zqsJHQ7Vd6PE6ZEtenJG7I2n1KhQBeYZFU0duJAbECMPRG3jtMAi/2HOwkdW3eGZ5XJ+Z7vECFjOqWevRjWbZOtCCJkXCu2Cvv7NzoUOjj7+7Ha+b1MwXOz7P6IefQwfPr7Qx33WNYNkR5s60nXuANkR9lnXDEIPWc8WNBvu2aJn+8v5JfDkF/V0Ac2nS3e5J/Hkntkj91yWe7S7O/U/OO/9/nzfWC5/+L6d70dfldsrOSEcbiXHs4R9ZeTUGdEXO41E2mX0TD3Rc1+Vue2gq6Mn6S963BX4Z8bF1hGBlLcwPW/GhFJGM4CUCRd5VsrdVDrz8FaoCpY8xcWTOrDOCSnOBWcH8YVmoYHzGDgNWYS+12pdxJe7SP/PVlKQZ1Q0ltVvtVEfXrRSojD3/w4NALvudd9hAN97x7ALQO6ywN90WwUDzqiS903h2CvFiZucZ32xcdvmv6RqMi6zFCtvjuZY4et851lN6g2N221+xAIv8Pb28RQHJhcwG04yOrU1uHxl6au0kLvBYz3dYOTi6S3doPF2irpKNAqe2I96mIIHWJ6Mr20XgF059dcuoD5axWEEoOsRQwDThwAuFECbfvE+Ox5dlxkCSB4CuFAAXbW8vpcRvldRHT4CfAK46WrhKAXQ5quzOxUAdAWAbrpkOEoBuE35E8Eb2Y//XuseVh+CPP1ZR+secvf0dXftkdMn9OjT/w==</diagram></mxfile>
|
103
hexagonal/etc/presentation.html
Normal file
103
hexagonal/etc/presentation.html
Normal file
@ -0,0 +1,103 @@
|
||||
<!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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user