Skip to content
Snippets Groups Projects
Verified Commit 01692c42 authored by Julien Wittouck's avatar Julien Wittouck
Browse files

:sparkles: : add hexagonal architecture course

parent a556fc92
Branches
No related tags found
No related merge requests found
Pipeline #53833 passed
Showing
with 1328 additions and 1 deletion
...@@ -64,6 +64,7 @@ tasks: ...@@ -64,6 +64,7 @@ tasks:
- w08-asynchronism/08-asynchronism.html - w08-asynchronism/08-asynchronism.html
- w08-high-availability/08-high-availability.html - w08-high-availability/08-high-availability.html
- w09-cloud/09-cloud.html - w09-cloud/09-cloud.html
- w10-hexa/10-hexa.html
- w12-rendu/12-criteres-notation.html - w12-rendu/12-criteres-notation.html
cmds: cmds:
- for: sources - for: sources
......
images/hexa.png

65.8 KiB

...@@ -311,7 +311,7 @@ ...@@ -311,7 +311,7 @@
<div class="card h-100"> <div class="card h-100">
<img <img
class="card-img-top" class="card-img-top"
src="images/placeholder.png" src="images/hexa.png"
alt="Clean Archi, et Archi Hexagonale" alt="Clean Archi, et Archi Hexagonale"
/> />
<div class="card-body"> <div class="card-body">
...@@ -321,6 +321,12 @@ ...@@ -321,6 +321,12 @@
</h5> </h5>
<p class="card-text">Salade, Tomates, Oignons 🥙</p> <p class="card-text">Salade, Tomates, Oignons 🥙</p>
</div> </div>
<div class="card-footer">
<div class="btn-group" role="group">
<a href="w10-hexa/10-hexa.html" class="btn btn-primary">Cours</a>
<a href="w10-hexa/10-hexa.pdf" class="btn btn-secondary"><i class="bi bi-file-earmark-pdf-fill"></i></a>
</div>
</div>
</div> </div>
</div> </div>
<div class="col"> <div class="col">
......
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>ALOM - Clean Archi et Archi Hexagonale</title>
<meta name="description" content="ALOM - Clean Archi et Archi Hexagonale">
<meta name="author" content="Julien WITTOUCK <julien@codeka.io>">
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" href="../reveal/dist/reveal.css">
<link rel="stylesheet" href="../reveal/dist/theme/white.css" id="theme">
<link rel="stylesheet" href="../css/miage-lille.css"/>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css"
integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
</head>
<body>
<div class="reveal">
<div class="slides">
<section>
<h1>ALOM</h1>
<h2>🥙 Clean Archi et Archi Hexagonale</h2>
<em>Salade, Tomates, Architecture Oignons</em>
</section>
<section>
<h3><i class="fab fa-uber"></i> UBER</h3>
<img src="images/Microservice-Architecture-Of-UBER.png" style="width: 50%"/>
</section>
<section>
<h2>Problématiques : </h2>
<p>Comment organiser le code ?</p>
<p>Comment être capable de changer de type de BDD ?</p>
<p>Minimiser le <i>Blast-Radius 💣💥</i> d'un changement</p>
<p>Séparer les responsabilités</p>
</section>
<section>
<h2>L'architecture logicielle</h2>
<ul>
<li>
Donner forme à la construction d'un système
<ul>
<li>Division en composants</li>
<li>Arrangement des composants</li>
<li>Communication des composants</li>
</ul>
</li>
<li>
Le but :
<ul>
<li>Faciliter le développement</li>
<li>Faciliter le déploiement</li>
<li>Faciliter les opérations</li>
<li>Faciliter la maintenance</li>
</ul>
</li>
</ul>
</section>
<section>
<h2>Les concepts des architectures logicielles</h2>
<ul>
<li>
Separation of concerns
<ul>
<li>La BDD ne doit pas dépendre des IHM</li>
<li>Les règles métier ne doivent pas dépendre de la BDD</li>
<li>Les règles métier ne doivent pas dépendre des IHM</li>
</ul>
</li>
</ul>
</section>
<section>
<h3>👮 S.O.L.I.D principles</h3>
<ul>
<li>S : Single Responsability</li>
<span class="fragment">Une classe doit avoir une seule responsabilité</span>
<li>O : Open/Closed</li>
<span class="fragment">Ouvert à l'extension, mais fermé à la modification</span>
<li>L : Liskov Substitution</li>
<span class="fragment">Pouvoir utiliser un sous-type</span>
<li>I : Interface Segregation</li>
<span class="fragment">Présenter plusieurs interfaces spécifiques</span>
<li>D : Dependency Inversion</li>
<span class="fragment">Dépendre d'abstractions, et non d'implémentations</span>
</ul>
</section>
<section>
<h3>Domain-Driven Design (DDD)</h3>
<img src="./images/DDD.jpg" class="img-right visible" width="15%">
<p>Les archis modernes prennent souvent racine dans les concepts de DDD.</p>
<ul>
<li>Domaine Métier : Le cœur de l'application est la logique métier.</li>
<li>Ubiquitous Language : Un langage commun entre les développeurs et les experts métier.</li>
<li>Entities et Value Objects : Des objets qui représentent les concepts fondamentaux du métier.</li>
</ul>
</section>
<section>
<h3>L'architecture n-tier (années 90)</h3>
<p>Séparatation physique entre les programmes et les BDD, entre les clients et les serveurs</p>
<img src="images/n-tier.png"/>
</section>
<section>
<h3>L'architecture n-tier avec Spring</h3>
<p>La vision "classique"</p>
<img src="images/n-tier-spring.png"/>
</section>
<section>
<h3>L'architecture Hexagonale (ports et adapters)</h3>
<p>Conceptualisé par Alistair Cockburn en 2005</p>
<img src="./images/hexagon.png"/>
</section>
<section>
<h3>La Onion Architecture</h3>
<p>Conceptualisé par Jeffrey Palermo en 2008</p>
<img src="./images/onion.png"/>
</section>
<section>
<h3>La Clean Architecture</h3>
<p>Conceptualisé par Robert C. Martin en 2012</p>
<img src="./images/CleanArchitecture.jpg"/>
</section>
<section>
<h3>Les éléments communs (et importants)</h3>
<ul>
<li>Séparer la logique métier des détails techniques</li>
<li>Indépendance d'un framework</li>
<li>Testabilité</li>
<li>Indépendance de la partie UI</li>
<li>Indépendance de la partie BDD</li>
</ul>
</section>
<section data-markdown>
<textarea data-template>
## Les moyens de mise en place
### Packages Java
![](images/diagrams-packages.png)
---
## Les moyens de mise en place
### Packages Java
![](images/diagrams-packages-highlights.png)
---
### En vision hexagonale
![](images/diagrams-hexa-packages.png)
---
### Séparation des classes
![](images/diagrams-hexa-packages-dtos.png)
---
### Séparation en modules
![](images/diagrams-hexa-modules.png)
---
### Séparation en modules - parent
```xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>hexagonal-architecture-sample</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>domain</module>
<module>web</module>
<module>data-jpa</module>
</modules>
</project>
```
---
### Séparation en modules - domain
```xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>hexagonal-architecture-sample</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>domain</artifactId>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
```
---
### Séparation en modules - web
```xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>hexagonal-architecture-sample</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>web</artifactId>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>domain</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
```
---
### Séparation en modules - data-jpa
```xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>hexagonal-architecture-sample</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>data-jpa</artifactId>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>domain</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
</project>
```
---
## Ce qu'il faut retenir
* Organisation du code et séparation des responsabilités
* SOLID !
* Le domaine métier est "pur", sans framework
* annotations customs
* tolérance pour certaines librairies (commons-lang, lombok, etc.)
* Pas de "meilleure" façon, toujours adapter au contexte
---
## Vocabulaires
![](images/diagrams-vocabulary.png)
---
## Vocabulaires
* Controlleurs - DTO (Data Transfer Object) - VO (Value Object)
* Use Cases - Services - Domain Objects
* Repositories - Entities
* Ports = interfaces
* Adapters = implémentations
### Hexa / Clean
* Ports / Adapters
* API / SPI : Application Programming Interface, Service Provider Interface
* In / Out
</textarea>
</section>
<section>
<h2>TP</h2>
<img src="../images/leonidas.png"/>
<p>
<a href="../w12-rendu/12-criteres-notation.html">Critères de notation <i class="em em-cloud"></i></a>
</p>
</section>
</div>
</div>
<script src="../reveal/dist/reveal.js"></script>
<script src="../reveal/plugin/markdown/markdown.js"></script>
<link rel="stylesheet" href="../reveal/plugin/highlight/zenburn.css">
<script src="../reveal/plugin/highlight/highlight.js"></script>
<script>
// More info about initialization & config:
// - https://revealjs.com/initialization/
// - https://revealjs.com/config/
Reveal.initialize({
hash: true,
// Learn about plugins: https://revealjs.com/plugins/
plugins: [RevealMarkdown, RevealHighlight],
markdown: {
smartypants: true
}
});
</script>
<aside class="miage_aside_logo"></aside>
</body>
</html>
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="24.7.17" pages="4">
<diagram name="n-tier" id="c5Fhrs3pAfpylfDjKvyY">
<mxGraphModel dx="539" dy="837" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-2" value="@Controller" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="600" y="80" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-3" value="@Service" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="600" y="140" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-4" value="@Repository" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="600" y="200" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="29rr4kCg7Ml6QkJ_xFnF-5" target="29rr4kCg7Ml6QkJ_xFnF-6">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-5" value="User interface" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="400" y="80" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="29rr4kCg7Ml6QkJ_xFnF-6" target="29rr4kCg7Ml6QkJ_xFnF-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-6" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="400" y="140" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-7" value="Database" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="400" y="200" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-8" value="1st tier" style="ellipse;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="280" y="80" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-9" value="2nd tier" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="280" y="140" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-10" value="3d tier" style="ellipse;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="280" y="200" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-13" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.cone;direction=north;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="520" y="100" width="80" height="120" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="7pg7vUrIsKb24wAKwi6E" name="packages">
<mxGraphModel dx="1976" dy="1171" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="OYEMWmDmDcUV23dBQ6uk-1" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="40" y="40" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-2" value="service" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="40" y="160" width="240" height="180" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-3" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="40" y="360" width="240" height="180" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-4" target="OYEMWmDmDcUV23dBQ6uk-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-4" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-5" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-6" target="OYEMWmDmDcUV23dBQ6uk-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-6" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-9" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="400" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-10" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-6" target="OYEMWmDmDcUV23dBQ6uk-9">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="220" as="sourcePoint" />
<mxPoint x="170" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-10" target="OYEMWmDmDcUV23dBQ6uk-9">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="340" as="sourcePoint" />
<mxPoint x="170" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-13" value="pokemons" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="320" y="40" width="240" height="500" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-17" target="OYEMWmDmDcUV23dBQ6uk-18">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-17" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-18" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-20" target="OYEMWmDmDcUV23dBQ6uk-18">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-20" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-21" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="400" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-22" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-20" target="OYEMWmDmDcUV23dBQ6uk-21">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="220" as="sourcePoint" />
<mxPoint x="450" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-22" target="OYEMWmDmDcUV23dBQ6uk-21">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="340" as="sourcePoint" />
<mxPoint x="450" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-25" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="600" y="40" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-26" value="domain" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="600" y="160" width="240" height="260" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-27" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="600" y="440" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-29" target="OYEMWmDmDcUV23dBQ6uk-30">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-29" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-30" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-32" target="OYEMWmDmDcUV23dBQ6uk-30">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-32" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-33" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="360" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-34" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-32" target="OYEMWmDmDcUV23dBQ6uk-33">
<mxGeometry relative="1" as="geometry">
<mxPoint x="730" y="220" as="sourcePoint" />
<mxPoint x="730" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-34" target="OYEMWmDmDcUV23dBQ6uk-33">
<mxGeometry relative="1" as="geometry">
<mxPoint x="730" y="340" as="sourcePoint" />
<mxPoint x="730" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram name="packages-highlights" id="FimorQUkRpZz5n_3ckBc">
<mxGraphModel dx="2075" dy="1230" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="k0NfVkmA0NVjakYlGoJw-0" />
<mxCell id="k0NfVkmA0NVjakYlGoJw-1" parent="k0NfVkmA0NVjakYlGoJw-0" />
<mxCell id="k0NfVkmA0NVjakYlGoJw-2" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="40" y="40" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-3" value="service" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="40" y="160" width="240" height="180" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-4" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="40" y="360" width="240" height="180" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-6" target="k0NfVkmA0NVjakYlGoJw-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-6" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="80" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-7" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="80" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-9" target="k0NfVkmA0NVjakYlGoJw-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-9" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="80" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-10" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="80" y="400" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-11" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="80" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=3;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-9" target="k0NfVkmA0NVjakYlGoJw-10">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="220" as="sourcePoint" />
<mxPoint x="170" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-11" target="k0NfVkmA0NVjakYlGoJw-10">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="340" as="sourcePoint" />
<mxPoint x="170" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-14" value="pokemons" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="320" y="40" width="240" height="500" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-16" target="k0NfVkmA0NVjakYlGoJw-17">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-16" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="360" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-17" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="360" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-19" target="k0NfVkmA0NVjakYlGoJw-17">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-19" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="360" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-20" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="360" y="400" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-21" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="360" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-19" target="k0NfVkmA0NVjakYlGoJw-20">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="220" as="sourcePoint" />
<mxPoint x="450" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-21" target="k0NfVkmA0NVjakYlGoJw-20">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="340" as="sourcePoint" />
<mxPoint x="450" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-24" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="600" y="40" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-25" value="domain" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="600" y="160" width="240" height="260" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-26" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="600" y="440" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-28" target="k0NfVkmA0NVjakYlGoJw-29">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-28" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="640" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-29" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="640" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-31" target="k0NfVkmA0NVjakYlGoJw-29">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-31" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="640" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-32" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="640" y="360" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-33" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="640" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-31" target="k0NfVkmA0NVjakYlGoJw-32">
<mxGeometry relative="1" as="geometry">
<mxPoint x="730" y="220" as="sourcePoint" />
<mxPoint x="730" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=3;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-33" target="k0NfVkmA0NVjakYlGoJw-32">
<mxGeometry relative="1" as="geometry">
<mxPoint x="730" y="340" as="sourcePoint" />
<mxPoint x="730" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="NRJLp39u4D51DtysMQp5" name="hexa-packages">
<mxGraphModel dx="1729" dy="1025" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-13" value="" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;size=110;" vertex="1" parent="1">
<mxGeometry x="240" y="40" width="400" height="360" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-1" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="40" y="80" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-2" value="domain" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="320" y="80" width="240" height="260" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-3" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="600" y="250" width="240" height="90" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-5" target="EpVNv-dTxgGB9FQMOEVZ-6">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-5" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="120" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-6" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="360" y="120" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-8" target="EpVNv-dTxgGB9FQMOEVZ-6">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-8" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-9" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="360" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-10" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-8" target="EpVNv-dTxgGB9FQMOEVZ-9">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="140" as="sourcePoint" />
<mxPoint x="450" y="180" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=3;" edge="1" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-10" target="EpVNv-dTxgGB9FQMOEVZ-9">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="380" as="sourcePoint" />
<mxPoint x="170" y="340" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-14" value="" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;size=110;" vertex="1" parent="1">
<mxGeometry x="240" y="480" width="400" height="360" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-15" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="40" y="520" width="240" height="160" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-16" value="domain" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="320" y="520" width="240" height="320" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-17" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="600" y="690" width="240" height="220" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-19" target="EpVNv-dTxgGB9FQMOEVZ-20">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ypqpasVO_qo0887bOKWy-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-19" target="ypqpasVO_qo0887bOKWy-1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-19" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="560" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-20" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="360" y="560" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-22" target="EpVNv-dTxgGB9FQMOEVZ-20">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-22" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="640" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-23" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="360" y="720" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="KsEOFNJlquhdU8HGQCLY-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-24" target="KsEOFNJlquhdU8HGQCLY-1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-24" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="720" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-22" target="EpVNv-dTxgGB9FQMOEVZ-23">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="580" as="sourcePoint" />
<mxPoint x="450" y="620" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=3;" edge="1" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-24" target="EpVNv-dTxgGB9FQMOEVZ-23">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="820" as="sourcePoint" />
<mxPoint x="170" y="780" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ypqpasVO_qo0887bOKWy-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="KsEOFNJlquhdU8HGQCLY-1" target="ypqpasVO_qo0887bOKWy-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="KsEOFNJlquhdU8HGQCLY-1" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepoJPAImpl&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="800" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="ypqpasVO_qo0887bOKWy-1" value="PokemonDTO" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="80" y="620" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="ypqpasVO_qo0887bOKWy-3" value="PokemonEntity" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="640" y="860" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="ypqpasVO_qo0887bOKWy-5" value="Pokemon" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="780" width="160" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
w10-hexa/images/CleanArchitecture.jpg

105 KiB

w10-hexa/images/DDD.jpg

59.5 KiB

w10-hexa/images/Microservice-Architecture-Of-UBER.png

55.5 KiB

w10-hexa/images/diagrams-hexa-modules.png

8.29 KiB

w10-hexa/images/diagrams-hexa-packages-dtos.png

38.3 KiB

w10-hexa/images/diagrams-hexa-packages.png

29.7 KiB

w10-hexa/images/diagrams-packages-highlights.png

44.9 KiB

w10-hexa/images/diagrams-packages.png

37.7 KiB

w10-hexa/images/diagrams-vocabulary.png

27.1 KiB

<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="24.7.17" pages="6">
<diagram name="n-tier" id="c5Fhrs3pAfpylfDjKvyY">
<mxGraphModel dx="539" dy="837" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-2" value="@Controller" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="600" y="80" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-3" value="@Service" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="600" y="140" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-4" value="@Repository" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="600" y="200" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="29rr4kCg7Ml6QkJ_xFnF-5" target="29rr4kCg7Ml6QkJ_xFnF-6">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-5" value="User interface" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="400" y="80" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="29rr4kCg7Ml6QkJ_xFnF-6" target="29rr4kCg7Ml6QkJ_xFnF-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-6" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="400" y="140" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-7" value="Database" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="400" y="200" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-8" value="1st tier" style="ellipse;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="280" y="80" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-9" value="2nd tier" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="280" y="140" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-10" value="3d tier" style="ellipse;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="280" y="200" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="29rr4kCg7Ml6QkJ_xFnF-13" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.cone;direction=north;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="520" y="100" width="80" height="120" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="7pg7vUrIsKb24wAKwi6E" name="packages">
<mxGraphModel dx="1976" dy="1171" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="OYEMWmDmDcUV23dBQ6uk-1" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="40" y="40" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-2" value="service" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="40" y="160" width="240" height="180" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-3" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="40" y="360" width="240" height="180" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-4" target="OYEMWmDmDcUV23dBQ6uk-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-4" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-5" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-6" target="OYEMWmDmDcUV23dBQ6uk-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-6" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-9" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="400" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-10" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="80" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-6" target="OYEMWmDmDcUV23dBQ6uk-9">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="220" as="sourcePoint" />
<mxPoint x="170" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-10" target="OYEMWmDmDcUV23dBQ6uk-9">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="340" as="sourcePoint" />
<mxPoint x="170" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-13" value="pokemons" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="320" y="40" width="240" height="500" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-17" target="OYEMWmDmDcUV23dBQ6uk-18">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-17" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-18" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-20" target="OYEMWmDmDcUV23dBQ6uk-18">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-20" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-21" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="400" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-22" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="360" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-20" target="OYEMWmDmDcUV23dBQ6uk-21">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="220" as="sourcePoint" />
<mxPoint x="450" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-22" target="OYEMWmDmDcUV23dBQ6uk-21">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="340" as="sourcePoint" />
<mxPoint x="450" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-25" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="600" y="40" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-26" value="domain" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="600" y="160" width="240" height="260" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-27" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="1">
<mxGeometry x="600" y="440" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-29" target="OYEMWmDmDcUV23dBQ6uk-30">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-29" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-30" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-32" target="OYEMWmDmDcUV23dBQ6uk-30">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-32" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-33" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="360" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-34" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="640" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-32" target="OYEMWmDmDcUV23dBQ6uk-33">
<mxGeometry relative="1" as="geometry">
<mxPoint x="730" y="220" as="sourcePoint" />
<mxPoint x="730" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="OYEMWmDmDcUV23dBQ6uk-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="1" source="OYEMWmDmDcUV23dBQ6uk-34" target="OYEMWmDmDcUV23dBQ6uk-33">
<mxGeometry relative="1" as="geometry">
<mxPoint x="730" y="340" as="sourcePoint" />
<mxPoint x="730" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram name="packages-highlights" id="FimorQUkRpZz5n_3ckBc">
<mxGraphModel dx="2075" dy="1230" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="k0NfVkmA0NVjakYlGoJw-0" />
<mxCell id="k0NfVkmA0NVjakYlGoJw-1" parent="k0NfVkmA0NVjakYlGoJw-0" />
<mxCell id="k0NfVkmA0NVjakYlGoJw-2" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="40" y="40" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-3" value="service" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="40" y="160" width="240" height="180" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-4" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="40" y="360" width="240" height="180" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-6" target="k0NfVkmA0NVjakYlGoJw-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-6" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="80" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-7" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="80" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-9" target="k0NfVkmA0NVjakYlGoJw-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-9" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="80" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-10" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="80" y="400" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-11" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="80" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=3;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-9" target="k0NfVkmA0NVjakYlGoJw-10">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="220" as="sourcePoint" />
<mxPoint x="170" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-11" target="k0NfVkmA0NVjakYlGoJw-10">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="340" as="sourcePoint" />
<mxPoint x="170" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-14" value="pokemons" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="320" y="40" width="240" height="500" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-16" target="k0NfVkmA0NVjakYlGoJw-17">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-16" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="360" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-17" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="360" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-19" target="k0NfVkmA0NVjakYlGoJw-17">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-19" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="360" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-20" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="360" y="400" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-21" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="360" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-19" target="k0NfVkmA0NVjakYlGoJw-20">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="220" as="sourcePoint" />
<mxPoint x="450" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-21" target="k0NfVkmA0NVjakYlGoJw-20">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="340" as="sourcePoint" />
<mxPoint x="450" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-24" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="600" y="40" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-25" value="domain" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="600" y="160" width="240" height="260" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-26" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="600" y="440" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-28" target="k0NfVkmA0NVjakYlGoJw-29">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-28" value="PokemonController" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="640" y="80" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-29" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="640" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-31" target="k0NfVkmA0NVjakYlGoJw-29">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-31" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="640" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-32" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="640" y="360" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-33" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" vertex="1" parent="k0NfVkmA0NVjakYlGoJw-1">
<mxGeometry x="640" y="480" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-31" target="k0NfVkmA0NVjakYlGoJw-32">
<mxGeometry relative="1" as="geometry">
<mxPoint x="730" y="220" as="sourcePoint" />
<mxPoint x="730" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="k0NfVkmA0NVjakYlGoJw-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=3;" edge="1" parent="k0NfVkmA0NVjakYlGoJw-1" source="k0NfVkmA0NVjakYlGoJw-33" target="k0NfVkmA0NVjakYlGoJw-32">
<mxGeometry relative="1" as="geometry">
<mxPoint x="730" y="340" as="sourcePoint" />
<mxPoint x="730" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="NRJLp39u4D51DtysMQp5" name="hexa-packages">
<mxGraphModel dx="447" dy="694" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-13" value="" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;size=110;" parent="1" vertex="1">
<mxGeometry x="240" y="40" width="400" height="360" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-1" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" parent="1" vertex="1">
<mxGeometry x="40" y="80" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-2" value="domain" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" parent="1" vertex="1">
<mxGeometry x="320" y="80" width="240" height="260" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-3" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" parent="1" vertex="1">
<mxGeometry x="600" y="250" width="240" height="90" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-5" target="EpVNv-dTxgGB9FQMOEVZ-6" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-5" value="PokemonController" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="80" y="120" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-6" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="360" y="120" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-8" target="EpVNv-dTxgGB9FQMOEVZ-6" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-8" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="360" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-9" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="360" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-10" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="640" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-8" target="EpVNv-dTxgGB9FQMOEVZ-9" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="140" as="sourcePoint" />
<mxPoint x="450" y="180" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=3;" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-10" target="EpVNv-dTxgGB9FQMOEVZ-9" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="380" as="sourcePoint" />
<mxPoint x="170" y="340" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-14" value="" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;size=110;" parent="1" vertex="1">
<mxGeometry x="240" y="480" width="400" height="360" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-15" value="web" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" parent="1" vertex="1">
<mxGeometry x="40" y="520" width="240" height="160" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-16" value="domain" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" parent="1" vertex="1">
<mxGeometry x="320" y="520" width="240" height="320" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-17" value="data" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;verticalAlign=bottom;align=left;" parent="1" vertex="1">
<mxGeometry x="600" y="690" width="240" height="220" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-19" target="EpVNv-dTxgGB9FQMOEVZ-20" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ypqpasVO_qo0887bOKWy-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-19" target="ypqpasVO_qo0887bOKWy-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-19" value="PokemonController" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="80" y="560" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-20" value="«interface»&lt;br&gt;&lt;b&gt;PokemonService&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="360" y="560" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-22" target="EpVNv-dTxgGB9FQMOEVZ-20" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-22" value="PokemonServiceImpl" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="360" y="640" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-23" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepository&lt;/b&gt;" style="html=1;whiteSpace=wrap;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="360" y="720" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="KsEOFNJlquhdU8HGQCLY-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-24" target="KsEOFNJlquhdU8HGQCLY-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-24" value="PokemonRepositoryImpl" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="640" y="720" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-22" target="EpVNv-dTxgGB9FQMOEVZ-23" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="580" as="sourcePoint" />
<mxPoint x="450" y="620" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EpVNv-dTxgGB9FQMOEVZ-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=0;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=3;" parent="1" source="EpVNv-dTxgGB9FQMOEVZ-24" target="EpVNv-dTxgGB9FQMOEVZ-23" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="170" y="820" as="sourcePoint" />
<mxPoint x="170" y="780" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ypqpasVO_qo0887bOKWy-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" parent="1" source="KsEOFNJlquhdU8HGQCLY-1" target="ypqpasVO_qo0887bOKWy-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="KsEOFNJlquhdU8HGQCLY-1" value="«interface»&lt;br&gt;&lt;b&gt;PokemonRepoJPAImpl&lt;/b&gt;" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="640" y="800" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="ypqpasVO_qo0887bOKWy-1" value="PokemonDTO" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="80" y="620" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="ypqpasVO_qo0887bOKWy-3" value="PokemonEntity" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="640" y="860" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="ypqpasVO_qo0887bOKWy-5" value="Pokemon" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="780" width="160" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="MEdb4AUAbgb11SuPAlvX" name="hexa-modules">
<mxGraphModel dx="782" dy="1214" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="d-9lFKzfhhLQQYkVDo1D-1" value="" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;size=60;" vertex="1" parent="1">
<mxGeometry x="120" y="240" width="240" height="200" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="v59GMtOM7vevkp0YK9PX-1" target="v59GMtOM7vevkp0YK9PX-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-1" value="web" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="80" y="80" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-2" value="domain" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="80" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="v59GMtOM7vevkp0YK9PX-3" target="v59GMtOM7vevkp0YK9PX-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-3" value="data" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="80" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-6" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="v59GMtOM7vevkp0YK9PX-7" target="v59GMtOM7vevkp0YK9PX-8">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-7" value="web" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="90" y="260" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-8" value="domain" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="320" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-9" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="v59GMtOM7vevkp0YK9PX-10" target="v59GMtOM7vevkp0YK9PX-8">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-10" value="data jpa" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="310" y="320" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-12" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="v59GMtOM7vevkp0YK9PX-11" target="v59GMtOM7vevkp0YK9PX-8">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-11" value="data mongo" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="290" y="380" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-14" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="v59GMtOM7vevkp0YK9PX-13" target="v59GMtOM7vevkp0YK9PX-8">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-13" value="kafka" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="100" y="380" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-16" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="v59GMtOM7vevkp0YK9PX-15" target="v59GMtOM7vevkp0YK9PX-8">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="v59GMtOM7vevkp0YK9PX-15" value="kafka" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="290" y="260" width="80" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="u8svijj-Xorm958uWhtm" name="vocabulary">
<mxGraphModel dx="1502" dy="1012" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="BkyBxnSlllpmX_6EBPTR-1" value="" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;size=40;" vertex="1" parent="1">
<mxGeometry x="80" y="40" width="240" height="210" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-5" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;endArrow=open;endFill=0;" edge="1" parent="1" source="BkyBxnSlllpmX_6EBPTR-2" target="BkyBxnSlllpmX_6EBPTR-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-2" value="API" style="rounded=0;whiteSpace=wrap;html=1;rotation=-70;" vertex="1" parent="1">
<mxGeometry x="66.19" y="79.67" width="103.29" height="35.3" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-3" value="SPI" style="rounded=0;whiteSpace=wrap;html=1;rotation=70;direction=west;flipH=1;flipV=1;" vertex="1" parent="1">
<mxGeometry x="230" y="79.67" width="103.29" height="35.3" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-6" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="BkyBxnSlllpmX_6EBPTR-4" target="BkyBxnSlllpmX_6EBPTR-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-4" value="Domain" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="160" y="114.97000000000003" width="80" height="70" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-13" value="" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;size=40;" vertex="1" parent="1">
<mxGeometry x="80.26" y="320" width="240" height="210" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-14" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;endArrow=open;endFill=0;" edge="1" parent="1" source="BkyBxnSlllpmX_6EBPTR-15" target="BkyBxnSlllpmX_6EBPTR-18">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-15" value="Port" style="rounded=0;whiteSpace=wrap;html=1;rotation=-70;" vertex="1" parent="1">
<mxGeometry x="66.45" y="359.67" width="103.29" height="35.3" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-16" value="Port" style="rounded=0;whiteSpace=wrap;html=1;rotation=70;direction=west;flipH=1;flipV=1;" vertex="1" parent="1">
<mxGeometry x="230.26" y="359.67" width="103.29" height="35.3" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-17" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="BkyBxnSlllpmX_6EBPTR-18" target="BkyBxnSlllpmX_6EBPTR-16">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-18" value="Domain" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="160.26" y="394.97" width="80" height="70" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-20" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;dashed=1;" edge="1" parent="1" source="BkyBxnSlllpmX_6EBPTR-19" target="BkyBxnSlllpmX_6EBPTR-16">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-19" value="Adapter" style="rounded=0;whiteSpace=wrap;html=1;rotation=0;" vertex="1" parent="1">
<mxGeometry x="360" y="320" width="103.29" height="40" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-21" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;dashed=1;" edge="1" parent="1" source="BkyBxnSlllpmX_6EBPTR-22" target="BkyBxnSlllpmX_6EBPTR-3">
<mxGeometry relative="1" as="geometry">
<mxPoint x="268.7436401189607" y="84.0667186770745" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-22" value="Infrastructure" style="rounded=0;whiteSpace=wrap;html=1;rotation=0;" vertex="1" parent="1">
<mxGeometry x="360" y="40" width="103.29" height="40" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-23" value="Application" style="rounded=0;whiteSpace=wrap;html=1;rotation=0;" vertex="1" parent="1">
<mxGeometry x="-60" y="39.67" width="103.29" height="40" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-24" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="BkyBxnSlllpmX_6EBPTR-23" target="BkyBxnSlllpmX_6EBPTR-2">
<mxGeometry relative="1" as="geometry">
<mxPoint x="144" y="113" as="sourcePoint" />
<mxPoint x="170" y="132" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-25" value="Use Cases" style="rounded=0;whiteSpace=wrap;html=1;rotation=0;" vertex="1" parent="1">
<mxGeometry x="-60" y="319.67" width="103.29" height="40" as="geometry" />
</mxCell>
<mxCell id="BkyBxnSlllpmX_6EBPTR-26" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;" edge="1" parent="1" source="BkyBxnSlllpmX_6EBPTR-25" target="BkyBxnSlllpmX_6EBPTR-15">
<mxGeometry relative="1" as="geometry">
<mxPoint x="53" y="85" as="sourcePoint" />
<mxPoint x="111" y="102" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
w10-hexa/images/hexagon.png

79.4 KiB

w10-hexa/images/n-tier-spring.png

20.3 KiB

w10-hexa/images/n-tier.png

12 KiB

w10-hexa/images/onion.png

28.6 KiB

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="556px" height="283px" viewBox="-0.5 -0.5 556 283" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2020-04-06T09:31:46.774Z&quot; agent=&quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/12.9.3 Chrome/80.0.3987.158 Electron/8.2.0 Safari/537.36&quot; etag=&quot;NhT2Ko_UiLjGesFHZO84&quot; version=&quot;12.9.3&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;zfgmmOZhkC7bbb6hCqzr&quot; name=&quot;Page-1&quot;&gt;7Vtde6I4FP41XtqHgCBeqq3tbGd3uqu73c4dQoppg3FD/GB+/SYSKl9l6DwdSEf0Qs9JSE7O+57kJEDPmAaHa+psVr8TD+KernmHnnHZ03UAbJP/CE0UayxbixU+RZ6sdFLM0TcolUm1LfJgmKnICMEMbbJKl6zX0GUZnUMp2WerPRKc7XXj+LCgmLsOLmrvkcdWsdbWhyf9DUT+KukZWKO4JHCSynIk4crxyD6lMq56xpQSwuJ/wWEKsXBe4pf4utkrpS+GUbhmdS5g+Mm4sf+JcPTnPOpbG/Cwo/3EuJ2Dt3LEvDnEEPd5bDWLElfwAWzEX+FDSHvG5JGs2VyWAy6HG8dFa39BNkKhcQ1zlonXBlJ+8RYYxIo7EvL+yJqrMHzkJZMVC7BsUnQxcwKEBX2mZEsR71nX/oDckRPsLCFOXe5y04+G7SBliGP4OVeBCcsmDkZ+qrek8liql4QxEoi+EcZTggk9Dt94NMVXDJNR8gxTJdbxI61N6eMP1xehkuiJvuEhpZLQXUMSQEYjXiUpNaz4EhlHxlAG1v7ESpDoVmlGGhJiR0aC/9L2iSz8j+TLW7hjFbjjMdLxRinemEA53oAib1yM+BA76ihNHX2g1aSOZv4s6ujFKcchHW1Uok1+pVKANmZxwuHjpwRjgVFHHnXIY+htkuev/STsa/fm/af+ZGETuLx/tvtWgSHQ41sEKa7Jmv9MKNmuPSiaEfgTylbEJ2sODYlZwpVPkLFIbnCcLSMVDLiBeAcFWgn74quOXHvVySGnjSsttL6h2+Ban/X/u32Yf3qeeb/RRT/ZPjnUh6yinnSkGGUlZBRih6FddqP07u4fNuJ+7kwa/ZsWHkRjF2YiXh5k47EUSUkh2JIdsyK42c3ipn0E3D77gy9Py/Fl/3aqPc2/2ovgbpbUUwS2hEUdbt+LN0st3ECHW71409vCrcrqVGp6R4m3dXmC9WqGmkVxv0IMznlOKkr31Nm8IbVMex8Uc8ZsCig5lMv+wFh8c3mkrPoeCWF+NzEqSQjNkoRQf4fji/JI+1XyQb3mRDdQaqLTzz0frAubrRRsRquwDT8QbiOlcBuce1pRFzZgKIWb2eFWE7fWlrcqs1P54N8hpF0yWJ4MWiU3s5pNBs8+HTFqxplap4qg3XzkA+Gm2LEiOPuEpAQ4tc4Vq6xOrWtXhw0HplvZSlc2A7S+sjV9gH8hnhXMBJtmfSfajtIdpIgPWdwRfVsIwgNimZ65LDoGF9pQiqd+hRClhHyvPx7Pg5oTsVr7eTBqmh5iLCl69DlsoCF+cEQy/ACGgvxo7dygyurcPuZy/OWsp3kwUG4D88s83mAqn9BWmV28AdTFinJ3fpo5VGsgVqyaewhdqVApPjc8Z8R9nkO6Qy6cHp8h/iAh45IAudKmlxdDhOBjJwyTTOWnxJWZf8SuyTWo8ug8nywsznsCzAM10BqcACvPylNAjT2PwjDssMphpbcdVHZpTF2Jl7uis4Yqn1e0H1aj16KqQ6uIVuuBBYqvTMqMvYOrCJfZYHBVHYOX7K+6JUsxqPQCVMf8vgMqB1TZK5zvBBQXT2+kH8tS7/UbV/8D&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g><path d="M 0 151 L 40 151 L 40 165 L 175 165 L 175 281 L 0 281 L 0 165 Z" fill="#f5f5f5" stroke="#666666" stroke-miterlimit="10" pointer-events="all"/><path d="M 0 165 L 40 165" fill="none" stroke="#666666" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 148px; margin-left: 2px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Courier New; color: #333333; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap; ">entities</div></div></div></foreignObject><text x="2" y="148" fill="#333333" font-family="Courier New" font-size="12px" font-weight="bold">entities</text></switch></g><path d="M 380 151 L 420 151 L 420 165 L 555 165 L 555 281 L 380 281 L 380 165 Z" fill="#f5f5f5" stroke="#666666" stroke-miterlimit="10" pointer-events="all"/><path d="M 380 165 L 420 165" fill="none" stroke="#666666" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 148px; margin-left: 382px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Courier New; color: #333333; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap; ">dtos</div></div></div></foreignObject><text x="382" y="148" fill="#333333" font-family="Courier New" font-size="12px" font-weight="bold">dtos</text></switch></g><path d="M 380 16 L 420 16 L 420 30 L 555 30 L 555 121 L 380 121 L 380 30 Z" fill="#f5f5f5" stroke="#666666" stroke-miterlimit="10" pointer-events="all"/><path d="M 380 30 L 420 30" fill="none" stroke="#666666" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 13px; margin-left: 382px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Courier New; color: #333333; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap; ">clients</div></div></div></foreignObject><text x="382" y="13" fill="#333333" font-family="Courier New" font-size="12px" font-weight="bold">clients</text></switch></g><path d="M 0 16 L 40 16 L 40 30 L 175 30 L 175 121 L 0 121 L 0 30 Z" fill="#f5f5f5" stroke="#666666" stroke-miterlimit="10" pointer-events="all"/><path d="M 0 30 L 40 30" fill="none" stroke="#666666" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 13px; margin-left: 2px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Courier New; color: #333333; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap; ">dao</div></div></div></foreignObject><text x="2" y="13" fill="#333333" font-family="Courier New" font-size="12px" font-weight="bold">dao</text></switch></g><path d="M 190 16 L 230 16 L 230 30 L 365 30 L 365 121 L 190 121 L 190 30 Z" fill="#f5f5f5" stroke="#666666" stroke-miterlimit="10" pointer-events="all"/><path d="M 190 30 L 230 30" fill="none" stroke="#666666" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 13px; margin-left: 192px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Courier New; color: #333333; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap; ">controller</div></div></div></foreignObject><text x="192" y="13" fill="#333333" font-family="Courier New" font-size="12px" font-weight="bold">controller</text></switch></g><path d="M 200 76 L 171.37 76" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 166.12 76 L 173.12 72.5 L 171.37 76 L 173.12 79.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 270.47 86 L 168.66 230.79" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 165.64 235.09 L 166.81 227.35 L 168.66 230.79 L 172.53 231.37 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 284.53 86 L 386.34 230.79" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 389.36 235.09 L 382.47 231.37 L 386.34 230.79 L 388.19 227.35 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 322.5 66 L 383.78 52.38" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 388.91 51.24 L 382.83 56.18 L 383.78 52.38 L 381.32 49.34 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 283.58 86 L 386.69 255.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 389.42 260.04 L 382.79 255.88 L 386.69 255.56 L 388.77 252.25 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="200" y="66" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 76px; margin-left: 202px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">ProductController</div></div></div></foreignObject><text x="202" y="79" fill="#1A1A1A" font-family="Courier New" font-size="11px">ProductController</text></switch></g><path d="M 200 51 L 171.37 51" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 166.12 51 L 173.12 47.5 L 171.37 51 L 173.12 54.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 269.17 61 L 169.08 181.11" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 165.72 185.14 L 167.51 177.52 L 169.08 181.11 L 172.89 182 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 270.68 61 L 168.59 210.74" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 165.63 215.08 L 166.68 207.32 L 168.59 210.74 L 172.46 211.26 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 285.83 61 L 385.92 181.11" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 389.28 185.14 L 382.11 182 L 385.92 181.11 L 387.49 177.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 284.53 61 L 386.34 205.79" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 389.36 210.09 L 382.47 206.37 L 386.34 205.79 L 388.19 202.35 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="200" y="41" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 51px; margin-left: 202px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">UserController</div></div></div></foreignObject><text x="202" y="54" fill="#1A1A1A" font-family="Courier New" font-size="11px">UserController</text></switch></g><path d="M 232.5 91 L 171.22 77.38" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 166.09 76.24 L 173.68 74.34 L 171.22 77.38 L 172.17 81.18 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 269.17 111 L 169.08 231.11" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 165.72 235.14 L 167.51 227.52 L 169.08 231.11 L 172.89 232 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 285.83 111 L 385.92 231.11" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 389.28 235.14 L 382.11 232 L 385.92 231.11 L 387.49 227.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="200" y="91" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 101px; margin-left: 202px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">ExportController</div></div></div></foreignObject><text x="202" y="104" fill="#1A1A1A" font-family="Courier New" font-size="11px">ExportController</text></switch></g><path d="M 38.68 62.4 L 38.68 170.83" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 38.68 176.08 L 35.18 169.08 L 38.68 170.83 L 42.18 169.08 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 45.03 63.6 L 44.29 192.43" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 44.26 197.68 L 40.8 190.66 L 44.29 192.43 L 47.8 190.7 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="10" y="41" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 51px; margin-left: 12px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">UserDAO</div></div></div></foreignObject><text x="12" y="54" fill="#1A1A1A" font-family="Courier New" font-size="11px">UserDAO</text></switch></g><path d="M 87.5 86 L 87.5 219.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 87.5 224.88 L 84 217.88 L 87.5 219.63 L 91 217.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="10" y="66" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 76px; margin-left: 12px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">ProductDAO</div></div></div></foreignObject><text x="12" y="79" fill="#1A1A1A" font-family="Courier New" font-size="11px">ProductDAO</text></switch></g><path d="M 467.5 61 L 467.5 244.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 467.5 249.88 L 464 242.88 L 467.5 244.63 L 471 242.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="390" y="41" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 51px; margin-left: 392px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">StockServiceClient</div></div></div></foreignObject><text x="392" y="54" fill="#1A1A1A" font-family="Courier New" font-size="11px">StockServiceClient</text></switch></g><rect x="390" y="176" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 186px; margin-left: 392px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">UserDTO</div></div></div></foreignObject><text x="392" y="189" fill="#1A1A1A" font-family="Courier New" font-size="11px">UserDTO</text></switch></g><rect x="390" y="201" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 211px; margin-left: 392px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">AddressDTO</div></div></div></foreignObject><text x="392" y="214" fill="#1A1A1A" font-family="Courier New" font-size="11px">AddressDTO</text></switch></g><rect x="10" y="176" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 186px; margin-left: 12px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">UserEntity</div></div></div></foreignObject><text x="12" y="189" fill="#1A1A1A" font-family="Courier New" font-size="11px">UserEntity</text></switch></g><rect x="10" y="201" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 211px; margin-left: 12px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">AddressEntity</div></div></div></foreignObject><text x="12" y="214" fill="#1A1A1A" font-family="Courier New" font-size="11px">AddressEntity</text></switch></g><rect x="10" y="226" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 236px; margin-left: 12px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">ProductEntity</div></div></div></foreignObject><text x="12" y="239" fill="#1A1A1A" font-family="Courier New" font-size="11px">ProductEntity</text></switch></g><rect x="390" y="226" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 236px; margin-left: 392px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">ProductDTO</div></div></div></foreignObject><text x="392" y="239" fill="#1A1A1A" font-family="Courier New" font-size="11px">ProductDTO</text></switch></g><rect x="390" y="251" width="155" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 153px; height: 1px; padding-top: 261px; margin-left: 392px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Courier New; color: #1A1A1A; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">StockDTO</div></div></div></foreignObject><text x="392" y="264" fill="#1A1A1A" font-family="Courier New" font-size="11px">StockDTO</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment