Desacoplar la lógica de negocio del framework

45
Desacoplar la lógica de negocio del framework

Transcript of Desacoplar la lógica de negocio del framework

Desacoplar la lógica de negocio del framework

Sobre mí

Manel López TorrentIngeniero en informática

Web Developer@mloptor

[email protected]

mmm.. algo sobre negocios¿Tienes idea de

qué va la peli?

#project_wishlist

Mantenibilidad

Escalabilidad

Fiabilidad

Objetos del negocio

Objetos o entidades abstractas que conforman un sistema del mundo real.

UniversidadPeriódico

Profesor

Alumno Asignatura

Departamento

Editor

Periodista

Noticia

Anuncio

Objetos del negocio

Reglas de negocio

Las reglas de negocio son aquellas que nos dicen cómo debe comportarse un sistema del mundo real.

Definen las relaciones , procesos y restricciones entre los objetos del dominio.

Reglas de negocio

Un alumno se puede matricular en varias asignaturas Un profesor

imparte una

asignatura

en un horario

Un profesor imparte pertenece a un departamento

Una

asignatura

pertenece a

un departamento

Modelo del dominio

Objetos del dominio+

Relaciones

Lógica de negocio

La parte de nuestro software que codifica las reglas de negocio y mantiene el modelo del dominio

Lógica de negocio

Lógica de negocio

Modelo - Vista - Controlador

VistaPeticiónDatos

Controlador

Modelo

Modelo - Vista - Controlador

VistaPeticiónDatos

Controlador

Aplica las

reglas de negocio

Modelo

Modelo - Vista - Controlador

VistaPeticiónDatos

Controlador

Aplica las

reglas de negocio

Modelo

Persistencia de datos

Modelo - Vista - Controlador

VistaPeticiónDatos

Controlador

Aplica las

reglas de negocio

Modelo

Persistencia de datos

Respuesta

Modelo - Vista - Controlador

VistaPeticiónDatos

Controlador

Aplica las

reglas de negocio

Modelo

Persistencia de datos

Respuesta

Lógica de negocio

Problema MVC

Alto nivel de acoplamientoDifícil testeoNo SRPAcceso HTTP

Hi! I'm your

controller

¿Solución?

ControladorLógica de negocio?

Arquitectura hexagonal

Arquitectura de softwareAlistair CockBurn

AKA “Ports and adapters”

Lógica de negocio

Framework

Puertos / Adaptadores

Adaptadores

Puertos

Puertos / Adaptadores

Puertos / Adaptadores

Puertos / Adaptadores

Puertos / Adaptadores

Factorías

Aislan los objetos del dominio

Capas y fronteras

Capa Infraestructura Aplicación Dominio

Responsabilidad Input/OutputPersistencia

Modela casos de uso

Modelo de dominio

Elementos Frameworks Interfaces RepositoriosFactoríasOrquestadores

EntidadesObjetos valorEventos de dominio

YOU SHALL NOT PASS!!!!

Fronteras

Ventajas

Lógica de

negocio

Agnóstica

Ventajas

Lógica de

negocio

Fácil testeo

Ventajas

Lógica de

negocio

Cambios aislados

+ refactoring

- deuda técnica

Ventajas

Adaptadores intercambiables

Ventajas

IndependienteDispositivos

Conclusión

+ Escalabilidad + Mantenibilidad

+ fiabilidad

+ Complejidad- Rapidez

Shopping Cart

1. CLIENTE Quiero ver un listado de productos para elegir lo que quiero comprar

2. CLIENTE Quiero ser capaz de elegir el producto que quiero comprar y añadirlo a mi

cesta de la compra

a. Si un producto está ya en la cesta incrementaremos la cantidad

3. CLIENTE Quiero ser capaz de eliminar productos de mi cesta si he cambiado de

opinión

4. CLIENTE Quero poder ver el coste total de todos los productos de mi cesta en todo

momento.

5. CLIENTE Quiero que se guarde mi cesta de la compra por si quiero pensarmelo

mejor

SHOW ME THE

CODE!!!

Shopping Cart

Shopping Cart Business Logichttps://github.com/malotor/shoppingcartSymfony 2https://github.com/malotor/cupon_shoppingcartShoppingCartBundlehttps://github.com/malotor/ShoppingCartBundle

Referencias

http://alistair.cockburn.us/Hexagonal+architecturehttp://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.htmlhttp://culttt.com/2014/12/31/hexagonal-architecture/http://userscape.com/laracon/2014/chrisfidao.htmlhttp://fideloper.com/hexagonal-architecturehttp://www.slideshare.net/carlosbuenosvinos/hexagonal-architecture-php-barcelona

Preguntas

There are no dumb

questions

#ff @David_Baltha @circun4 @josedrac @helenatxu @Raymond7 thx por el feedback

Gracias a todos