Skip to content

Commit 89e7f51

Browse files
authored
Merge pull request iluwatar#519 from iluwatar/presentation
Add hexagonal architecture presentation
2 parents cc02ff4 + 1abf5b1 commit 89e7f51

File tree

5 files changed

+110
-3
lines changed

5 files changed

+110
-3
lines changed

hexagonal/README.md

+6-3
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,18 @@ Allow an application to equally be driven by users, programs, automated test or
2323
## Applicability
2424
Use Hexagonal Architecture pattern when
2525

26-
* it is important that the application is fully testable
27-
* you use Domain Driven Design methodology and/or Microservices architectural style
26+
* When the application needs to be independent of any frameworks
27+
* When it is important that the application highly maintainable and fully testable
2828

2929
## Tutorials
3030
* [Build Maintainable Systems With Hexagonal Architecture](http://java-design-patterns.com/blog/build-maintainable-systems-with-hexagonal-architecture/)
3131

32+
## Presentations
33+
* [Hexagonal Architecture](https://github.com/iluwatar/java-design-patterns/tree/master/hexagonal/etc/presentation.html)
34+
3235
## Real world examples
3336

34-
* [Apache Isis](https://isis.apache.org/)
37+
* [Apache Isis](https://isis.apache.org/) builds generic UI and REST API directly from the underlying domain objects
3538

3639
## Credits
3740

hexagonal/etc/layers.png

15.5 KB
Loading

hexagonal/etc/ports_and_adapters.png

34 KB
Loading

hexagonal/etc/ports_and_adapters.xml

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
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>

hexagonal/etc/presentation.html

+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>Title</title>
5+
<meta charset="utf-8">
6+
<style>
7+
@import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
8+
@import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
9+
@import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);
10+
11+
body { font-family: 'Droid Serif'; }
12+
h1, h2, h3 {
13+
font-family: 'Yanone Kaffeesatz';
14+
font-weight: normal;
15+
}
16+
.remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
17+
</style>
18+
</head>
19+
<body>
20+
<textarea id="source">
21+
22+
class: center, middle
23+
24+
# Hexagonal Architecture
25+
26+
---
27+
28+
# Also known as
29+
30+
* Ports and Adapters
31+
* Clean Architecture
32+
* Onion Architecture
33+
34+
---
35+
36+
# Layered architecture problems
37+
38+
* No clear application core
39+
* Business logic leaks to the presentation layer
40+
<br />
41+
<br />
42+
43+
.center[![Alt text](layers.png)]
44+
45+
---
46+
47+
# Intent
48+
49+
* Application can be driven by users, programs, automated test or batch scripts
50+
* Application can be developed and tested in isolation from its eventual run-time devices and databases
51+
52+
---
53+
54+
# Applicability
55+
56+
Use Hexagonal Architecture pattern
57+
58+
* When the application needs to be independent of any frameworks
59+
* When it is important that the application highly maintainable and fully testable
60+
61+
---
62+
63+
# Concepts
64+
65+
* Ports are interfaces
66+
* The ports that drive the application are called primary ports
67+
* The ports that are driven by the application are called secondary ports
68+
69+
---
70+
71+
# Concepts
72+
73+
* Adapters are interface implementations
74+
* Typically different adapters for testing and production are provided
75+
76+
---
77+
78+
# Diagram
79+
80+
.center[![Alt text](ports_and_adapters.png)]
81+
82+
---
83+
84+
# Real world examples
85+
86+
* [Apache Isis](https://isis.apache.org/) builds generic UI and REST API directly from the underlying domain objects
87+
88+
---
89+
90+
# Tutorials
91+
92+
* Blog http://java-design-patterns.com/blog/build-maintainable-systems-with-hexagonal-architecture/
93+
* Source code http://java-design-patterns.com/patterns/hexagonal/
94+
95+
</textarea>
96+
<script src="https://gnab.github.io/remark/downloads/remark-latest.min.js">
97+
</script>
98+
<script>
99+
var slideshow = remark.create();
100+
</script>
101+
</body>
102+
</html>
103+

0 commit comments

Comments
 (0)