Skip to content

Commit

Permalink
Merge pull request #519 from iluwatar/presentation
Browse files Browse the repository at this point in the history
Add hexagonal architecture presentation
  • Loading branch information
iluwatar authored Nov 27, 2016
2 parents cc02ff4 + 1abf5b1 commit 89e7f51
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 3 deletions.
9 changes: 6 additions & 3 deletions hexagonal/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Binary file added hexagonal/etc/layers.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added hexagonal/etc/ports_and_adapters.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions hexagonal/etc/ports_and_adapters.xml
Original file line number Diff line number Diff line change
@@ -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 changes: 103 additions & 0 deletions hexagonal/etc/presentation.html
Original file line number Diff line number Diff line change
@@ -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[![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/

</textarea>
<script src="https://gnab.github.io/remark/downloads/remark-latest.min.js">
</script>
<script>
var slideshow = remark.create();
</script>
</body>
</html>

0 comments on commit 89e7f51

Please sign in to comment.