Vous êtes sur la page 1sur 38

Arquitectura Hexagonal

Santiago Quiñones, M.Sc.

lsquinones@utpl.edu.ec
01
Fundamentos
Un buen código es:
✔ Mantenible

✔ Escalable

✔ Fácil de agregar/eliminar características


Alistair
Cockburn
arquitectura
hexagonal

Lógica de negocio

Detalles Técnicos
Puertos & Adaptadores, es una
arquitectura, que previene que Lógica de negocio
los detalles técnicos se infiltren
en la lógica de negocios.
Detalles Técnicos

Puertos & Adaptadores


Puertos & Adaptadores, es una
arquitectura, que previene que
los detalles técnicos se infiltren
en la lógica de negocios.
Puertos & Adaptadores, es una
arquitectura, que previene que
los detalles técnicos se infiltren
en la lógica de negocios.
Ejemplo de
implementación del
patrón adapter

El servidor web del sistema de


venta de vehículos crea y
administra los documentos
destinados a los clientes.
Ejemplo de
implementación del
patrón adapter
Puertos
Interface
La LN “lo sabe y solo eso” Lógica de negocio

Adaptadores
Implementan el
puerto. Uno por
cada sistema
externo.
Puertos
Interface
La LN “lo sabe y solo eso” Lógica de negocio

Adaptadores
Implementan el
puerto. Uno por
cada sistema
externo.
cómo ayudan los adaptadores

• Evita que las dependencias externas se


filtren el código.
• Capa anticorrupción.
• Son reemplazables. Lógica de negocio
02
Códigos de ejemplo
Tres en raya
vamos a analizarlo !
interface TicTacToePort {
markCell(x, y);
...
Tres en raya }
lóg ica d e n e gocios
import javax.swing.JTextField;
AdapterUI implement TicTacToePort {

public markCell(row, column) {


textField[row][column].setText(‘X’);
}
}

CoreLogic() {
TicTacToePort ticTacToePort;
think() {
if …
ticTacToePort.markCell(row, column);
}
}
interface TicTacToePort {
markCell(x, y);
...
Tres en raya }
p u e rto
import javax.swing.JTextField;
AdapterUI implement TicTacToePort {

public markCell(row, column) {


textField[row][column].setText(‘X’);
}
}

CoreLogic() {
TicTacToePort ticTacToePort;
think() {
if …
ticTacToePort.markCell(x, y);
}
}
interface TicTacToePort {
markCell(row, column;
...
Tres en raya }
ad aptad or
import javax.swing.JTextField;
AdapterUI implement TicTacToePort {

public markCell(row, column) {


textField[row][column].setText(‘X’);
}
}

CoreLogic() {
TicTacToePort ticTacToePort;
think() {
if …
ticTacToePort.markCell(x, y);
}
}
UML

BL Low Details

<<Interface>>
Juego Adivina mi número
vamos a analizarlo !
Saludo de cumpleaños
vamos a analizarlo !
El problema

1. Leer los registros de los empleados de un archivo


2. Filtrar empleados cuyo cumpleaños es hoy.
3. Envía un mensaje personalizado de saludos por
correo electrónico.
Nuestras metas

• Código que no cueste mucho cambiar • La lógica de negocio no debe


cuando cambian los requisitos. depender de las API de bajo nivel.
• Código que puede ser fácil de testear. • El código que habla con el sistema
• Código que es fácil de entender. externo está claramente
separado.
La arquitectura hexagonal
Recordar

• El modelo de dominio no depende de


nada.
• Todo depende del modelo de dominio.
Dónde nos gustaría estar
referencias

• http://matteo.vaccari.name/blog/archives/154
• http://tpierrain.blogspot.com/2016/04/hexagonal-layers.html
• https://danielggarcia.wordpress.com/2014/02/28/patrones-estructurales-i-
patron-adapter-wrapper/
• https://engineering.laterooms.com/hexagonal-architecture-in-practice/
• http://wiki.c2.com/?HexagonalArchitecture
• http://wiki.c2.com/?PortsAndAdaptersArchitecture
• https://spin.atomicobject.com/2013/02/23/ports-adapters-software-
architecture/
• http://www.natpryce.com/articles/000772.html
Gracias
Q&A

Vous aimerez peut-être aussi