Upload
docong
View
218
Download
0
Embed Size (px)
Citation preview
Modelando la Lógica de Negocio
Ing. Juan M. Arias2011
Arquitectura de Proyectos ITUTN - FRBA
Modelando la Lógica de Negocio
Domain Model
DDD
Layers
Hexagonal Arch.
SoC
DSL
Wednesday, May 4, 2011
Arquitectura de Proyectos ITModelando la Lógica de Negocio
Agenda> Introducción
> Domain Model> Domain Driven Design
> Capas> Alternativas a las Capas
> Mecanismos de Separación> DSL
> BPM
Wednesday, May 4, 2011
Arquitectura de Proyectos ITIntroducción
Algunos tipos de Arquitectura
> Sociales
> Móviles
> Games
> Empresariales
4Wednesday, May 4, 2011
Arquitectura de Proyectos ITIntroducción
¿Qué es la Lógica de Negocio?– Conceptos de negocio.
– Conjunto de procesos.
– Contiene información de los estados de los procesos de negocio.
Es el Corazón de Nuestro Sistema
5Wednesday, May 4, 2011
Arquitectura de Proyectos ITDomain Model
¿Qué es un Modelo?– Una visión simplificada de algo complejo utilizado en el
análisis y resolución de problemas.
– Debe tener un propósito.
7Wednesday, May 4, 2011
Arquitectura de Proyectos ITDomain Model
¿Qué es Domain Model?– Es un modelo que representa un Dominio de Negocio.
– Debe expresar el Dominio y no los detalles técnicos.
– No es un diagrama UML o un esquema de BD.
– Debe ser relevante tanto para los expertos de dominio como para el equipo de desarrollo.
8Wednesday, May 4, 2011
Arquitectura de Proyectos ITDomain Model
ComponentesAb
stra
cció
n
Tecnología Negocio
Diagrama de Clases y Secuencia
Unit Test
Código OO
Esquema de Base de Datos
Diagrama de Capas
Diagrama de Deploy
BPM & Workflow
Data examples
Story test
Prototypes
DSL
Obtenido de Architecture
Journal Magazine
9Wednesday, May 4, 2011
Arquitectura de Proyectos ITDomain Model
Diseño - Aislando el Modelo– Separar el dominio de los demás aspectos
– Evitar el acoplamiento – Pensar en el cambio, no implica que todo va cambiar
– Las capas no siempre son la solución
El Dominio es el Core de nuestra aplicación
10Wednesday, May 4, 2011
Arquitectura de Proyectos ITDomain Model
Principios claves de Diseño
Single Responsability Principle
Open Close PrincipleLiskov Substitution Principle
Interface Segregation PrincipleDependency Inversion Principle
> SOLID
11Wednesday, May 4, 2011
Arquitectura de Proyectos ITDomain Model
Principios claves de Diseño
> Diseño altamente Cohesivo.
> Código transversal abstraído de la lógica de la aplicación.
> Separation of Concerns
> DRY (Donʼt Repeat Yourself)
> YAGNI (You Ainʼt Gonna Need It)
12Wednesday, May 4, 2011
Arquitectura de Proyectos ITModelando la Lógica de Negocio
DDDDomain Driven Design
Wednesday, May 4, 2011
Arquitectura de Proyectos ITDDD - Domain Driven Design
¿Qué es DDD?– ¿Podemos construir software complejo sin conocer el dominio?
– ¿Quién conoce el negocio? ¿El Arquitecto? ¿El Desarrollador?
– Necesitamos crear una Abstracción del Dominio.
– Modelo OO que refleja el conocimiento de un Dominio.
14Wednesday, May 4, 2011
Arquitectura de Proyectos ITDDD - Domain Driven Design
El Problema de la ComunicaciónQuiero que se puedan cambiar las reglas de las políFcas para disFntos clientes
Podemos usar un Strategy Podemos
usar IoC
¿Que es IoC?
¿Nos entendemos realmente?
15Wednesday, May 4, 2011
Arquitectura de Proyectos ITDDD - Domain Driven Design
Lenguaje Ubicuo
Traducir
Domain Expert
Technical Expert
Refinar
Acordar
Jerga
Jerga
16Wednesday, May 4, 2011
Arquitectura de Proyectos ITDDD - Domain Driven Design
Lenguaje Ubicuo
Domain Expert
Technical Expert
Lenguaje Ubicuo
Bounded Context
Bounded Context
Bounded Context
17Wednesday, May 4, 2011
Arquitectura de Proyectos ITDDD - Domain Driven Design
Lenguaje Ubicuo– Facilitamos la transferencia de conocimiento.
– Los desarrolladores tienen un buen conocimiento del dominio.
– Requiere tiempo y esfuerzo
Arquitecto y Experto más Felices
18Wednesday, May 4, 2011
Arquitectura de Proyectos ITDDD - Domain Driven Design
TDD
Red Green Refactor
Buenas Prácticas
– Desarrollo de UT que sirven como especificación.
– Pensar en la interface antes de la implementación.
– Código dirigido por los Test
> TDD
19Wednesday, May 4, 2011
Arquitectura de Proyectos ITDDD - Domain Driven Design
Buenas Prácticas> Aislar el modelo Arquitectura típica en 4 capas
User Interface
Applica:on
Domain
Infraestructure
20Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Capas– Agrupaciones horizontales lógicas de componentes de
Software.
– Ayudan a diferenciar los distintos tipos de tareas.
– Maximiza la reutilización.
– Ayuda a aplicar el principio de SoC (Separation of Concerns o Separación de Responsabilidades).
No confundir Layers con Tiers
22Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Capa de Persistencia
Persistencia
– Centraliza el acceso a la/s fuente/s de datos/s.
– Desacopla la tecnología utilizada.
– Se utilizan DAOs y/o Repositorios.
– Puede implementarse con un ORM (Hibernate, Entity Framework, etc.).
– Algunos patrones:Active RecordData MapperTable Module
23Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Capa de Dominio
Dominio
– Implementa la funcionalidad principal de nuestro Sistema.
– Aislado de la Infraestructura.
– Cuenta con Entidades
– Anemic Model: Cuando nuestras entidades no tienen lógica propia.
– Contrato de Interfaces.
– Las operaciones surgen del modelo ubicuo
24Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Capa de Dominio
Dominio
– Identificar bien las responsabilidades.
– Alta cohesión.
– No mezclar componentes.
– Reutilizar lógica común.
– Hacer uso de abstracciones.
> Algunas consideraciones
25Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Capa de Aplicación
Aplicación
– Coordina actividades de la Aplicación.
– No incluye lógica de Negocio.
– Coordina servicios de la capa de nivel inferior.
– Es como una fachada (Façade).
– Puede incluir workflows.
– Puede incluir conversores a DTO en casode contar con dichos objetos.
26Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Capa de Servicios
Servicios
– Se trata de Servicios Distribuidos.
– Primero necesito tener definido el contrato.
– Una vez más, los servicios son una fachada de nuestra lógica.
– Expone servicios a la capa de presentación o a otros servicios.
– Intercambian estructuras de datos serializadas,DTOs o valores escalares.
– Uso de REST o SOAP
27Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Capa de Servicios
ServiciosServicio
Aplicación Aplicación Aplicación
28Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Capa de Presentación
Presentación
– Describe la Interfaz de Usuario.
– No olvidar que es lo que el usuario ve.
– Evitar acoplamiento entre componentes.
– No olvidarse de los Unit Test.
– Algunos Patrones:MVCMVPMVVM
29Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Capa de Infraestructura Transversal
Inf. Transversal
– Aspectos Horizontales
– Impactan en toda la aplicación.
– Busca componentes comunes para favorece la reutilización
– Se utilizan técnicas como DI y AOP.
– Aspectos transversales:SeguridadCacheLoggingValidaciones de Input
30Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Capa de Infraestructura Transversal> Radiografía de una aplicación no modularizada
> Radiografía de una aplicación modularizada
31Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Persistence
Domain
Applica:on
Service
Presenta:on
Database
Transversal
32Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Persistence
Domain
Applica:on
Service
Presenta:on
Database
Transversal
Caching
Security
Logging
IoC Repository
Repository Contracts
Applica)on Services
DTOs
Model
Controller
View
Web
En))esCore
Domain Services
Core
33Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Persistence
Domain
Applica:on
Service
Presenta:on
Database
Transversal
Caching
Security
Logging
IoC Repository
Repository Contracts
Applica)on Services
DTOs
Model
Controller
View
Web
En))esCore
Domain Services
Core
34Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Persistence
Domain
Applica:on
Service
Presenta:on
Database
Transversal
Caching
Security
Logging
IoC Repository
Applica)on Services
DTOs
Model
Controller
View
Web
En))esCore
Domain Services
Core
Aunque a veces encontramos esto…!!
35Wednesday, May 4, 2011
Arquitectura de Proyectos ITLayers - Capas
Algunas Consideraciones> Suelen existir un acoplamiento al no respetar el Principio
de Inversión de Dependencia.> Cambios en cascada.
> Puede haber problemas de Performance.> Demasiado complejo para:
– Aplicaciones orientada a datos.– Aplicaciones pequeñas
– Pocas reglas de negocio
Seamos Agiles!
36Wednesday, May 4, 2011
Arquitectura de Proyectos ITModelando la Lógica de Negocio
AlternaFvas a las Capas
Wednesday, May 4, 2011
Arquitectura de Proyectos ITAlternativa a las Capas
RAD - Rappid Application Development> Aplicaciones pequeñas con pocos cambios.
> Orientadas a los datos> Algunos ejemplos:
– Dynamic Data .NET– Ruby on Rails
– MVC Scaffolding– Lightswitch
38Wednesday, May 4, 2011
Arquitectura de Proyectos ITAlternativa a las Capas
Hexagonal Architecture– Port & Adapters– Contratos para la integración con el Dominio– El Dominio es agnóstico a las tecnologías– Separated Interfaces Pattern
39Wednesday, May 4, 2011
Arquitectura de Proyectos ITAlternativa a las Capas
Domain
Mock DB
UI
Unit Test
DB
App
Hexagonal Architecture
Aislamiento por medio de Interfaces
40Wednesday, May 4, 2011
Arquitectura de Proyectos ITAlternativa a las Capas
Hexagonal Architecture> Metodología
Aplicación
Mock DB DB Access
Tests User UI
1 2 3 4
41Wednesday, May 4, 2011
Arquitectura de Proyectos ITAlternativa a las Capas
Hexagonal Architecture
Domain
DB
Mock DB
42Wednesday, May 4, 2011
Arquitectura de Proyectos ITAlternativa a las Capas
Transaction Script> Orientada a Datos.
– Relación pantalla / tabla– Lógica en Procedimientos
> Poca Lógica– Funcionalidad acotada
– Evolución costosa y difícil de mantener> Workflow controlado
– Cada transacción tiene su Transaction Script
43Wednesday, May 4, 2011
Arquitectura de Proyectos ITAlternativa a las Capas
Transaction Script
User Interface
Services
Infraestructure
> Diseño
44Wednesday, May 4, 2011
Arquitectura de Proyectos ITAlternativa a las Capas
Transaction Script
Servicio
UI DBNombre
Apellido
Edad
45Wednesday, May 4, 2011
Arquitectura de Proyectos ITAlternativa a las Capas
Transaction Script> Algunas consideraciones
– No existe un modelo de la lógica.
– Suele existir código duplicado.
– Si la lógica se vuelve más compleja, progresivamente será más difícil de mantener.
– No utiliza el Paradigma Orientado a Objetos.
47Wednesday, May 4, 2011
Arquitectura de Proyectos ITAlternativa a las Capas
Transaction Script> Comparación con un modelo en capas
Esfu
erzo
Complejidad de la lógica de Dominio
TransactionScript
Domain
Model
48Wednesday, May 4, 2011
Arquitectura de Proyectos ITModelando la Lógica de Negocio
Separación de la LógicaMecanismos de
Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
¿Qué pasa cuando no separamos la lógica?
Guardar(){ // Manejo el evento de guardar // Abro una transacción // Verifico reglas de negocio // Logueo la transacción // Guardo // Cierro la transacción}
Guardar
– Código Spaghetti.
– Extremadamente difícil de mantener.
50Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Mecanismos de Separación
> Separación Programática
> Separación Declarativa
> Separación Introspectiva / Reflexiva
51Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Programática– Separación de responsabilidades mediante distintos
objetos que se envían mensajes entre sí.
Objeto de
Negocio
DAO
52Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Declarativa– Separa la lógica de negocio de aspectos intrusivos.
– Parametriza fuera del código los componentes arquitecturales.
– Me concentro en el qué y no en el cómo.
53Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Declarativa> XAML - eXtensible Application Markup Language
– Lenguaje declarativo basado en XML para interfaces
– Soporte clases y métodos– Separo la definición de la interfaz de su lógica de
comportamiento
Guardar <Button Width="102" Height="31" Click=“OnClick” />
54Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Declarativa> Metadata
[Required]public void Email(string email){ this.Email = email;}
Annotat
ion
55Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Declarativa> Beneficios de utilizar Aspectos
Sin Aspectos
Con Aspectos
56Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Declarativa> AOP (Aspectos)
– Trata de resolver el problema de Cross-Custting Concerns.
– Separo la lógica de negocio componentes de infraestructura.
– Parametrizo fuera del código los componentes arquitecturales.
57Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Declarativa> Aspectos típicos de una aplicación
– Seguridad
– Cache– Gestión de Configuración
– Gestión de Excepciones– Logging
– Validaciones de datos de entrada
58Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Declarativa> Ejemplo de un aspecto de Logging
public ActionResult Customers(){ var logger = new Logger(); logger.Log(string.Format(“Se accedió al método ‘Customers' del controlador ‘Home’”)); // Get Customers return View();}
Sin Aspectos
View Controller
59Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Declarativa> Ejemplo de un aspecto Logging
View Controller
[HandleLogging]public ActionResult Customers(){ // Get Customers return View();}
Con Aspectos
Ejemplo uFlizando AcFon Filters de ASP MVC 3
60Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Declarativa> Ejemplo de un aspecto Logging
public class HandleLoggingAttribute : ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext context) { base.OnActionExecuted(context); Log(context); }
private void Log(ActionExecutedContext context) { var logger = new Logger();
logger.Log(string.Format("Se accedió al método {0} del controlador {1}", context.ActionDescriptor.ActionName, context.ActionDescriptor.ControllerDescriptor.ControllerName)); } }
El Aspecto
61Wednesday, May 4, 2011
Arquitectura de Proyectos ITMecanismos de Separación de la Lógica
Separación Introspectiva / Reflexiva– Puedo manipular la lógica utilizando Reflection.
– Modifica el comportamiento de mi aplicación.– Me permite extender mi aplicación.
Dominionuevo Comportamiento
62Wednesday, May 4, 2011
Arquitectura de Proyectos ITModelando la Lógica de Negocio
DSLDomain Specific Language
Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
¿DSL… y eso con que se come?– El diseño de una Aplicación mapea un problema de dominio
con su implementación.– Para que ese mapeo sea posible, necesitamos un
vocabulario común que ambos dominios compartan.
MAP
Problem Domain
Security
Stock
Bonds
Solu3on Domain
Classes
Objects
Methods
64Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
¿Qué es un DSL?– Es un lenguaje de programación dedicado a resolver un
problema particular.
– Es un lenguaje específico a mi dominio en contraposición de los lenguajes de propósito general (C#, Java, UML).
– Permite diseñar abstracciones que forman parte de un dominio.
– Se focaliza en el problema de dominio y no en los detalles de implementación.
– Necesita proveer la sintaxis y semántica correcta al usuario.
65Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
Creando un Lenguaje Compartido> Vocabulario compartido
El experto de dominio se puede entender con quien lo modele
> Terminología común en los Test Cases
El experto de dominio podría verificar los casos.
> Vocabulario común durante el Desarrollo
El desarrollo resultante hablará en el mismo idioma que el lenguaje de Dominio.
66Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
Algunos ejemplos de DSL>SQL
>CSS>HTML
>RSpec>ANTRL
>Visualization & Modeling SDK (Visual Studio)>M Language
67Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
Tipos de DSL> Externos
– Lenguaje independiente.
– Standalone.
– Son muy expresivos y pueden leerse como si fuese inglés.
– Necesita de compiladores y analizadores.
68Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
Tipos de DSL> Internos
– Embebidos dentro del lenguaje.
– No son tan expresivos como los DSL Externos.
– Son más sencillos porque no usan compiladores externos.
– Hace que el lenguaje general parezca de uso específico.
– A veces ligado al concepto de «Fluent Interfaces»
69Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
DSL vs UML: O cuando utilizarlos
No hay una "mejor" que otra
– UML es de uso general. Puede contar con elementos innecesarios a nuestro problema.
– UML es lo más utilizado para transmitir ideas.
– UML es más fácil de implementar al inicio.
– UML se vuelve más complejo al extenderlo.
– DSL se ajusta a nuestro dominio.
– DSL se lleva mejor con los Code-Generators.
– UML puede trabajar de forma conjunta con DSL
70Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
Ejemplo de un DSL Visual> Vista de Diseño
71Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
Ejemplo de un DSL Visual> Vista del DSL del punto de vista del usuario
Padre
HijoRelación
Padre-Hijo
Podría luego generar código a parFr de este DSL
72Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
Fluent Interfaces– Es un tipo particular de API diseñada de forma «fluida»
– Facilitan el trabajo al implementar API que son más fáciles de leer y escribir.
– Pensar como expresar el DSL de manera lógica y autodescriptiva, de forma independiente a la funcionalidad real.
– Nos da la sensación de tener todo junto y conectado en vez de comandos desconectados.
73Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
Un ejemplo simple de legibilidad> Comunmente encontramos:
> Pero usando una Extensión Literal:
schedule.RepeatEvery = new TimeSpan(2,0,0);schedule.ExpiresIn = new TimeSpan(100,0,0,0);
schedule.RepeatEvery = 2.Hours();schedule.ExpiresIn = 100.Days();
74Wednesday, May 4, 2011
Arquitectura de Proyectos ITDSL – Domain Specific Language
Algunos ejemplos de Fluent> Fluent Assertionsstring actual = "ABCDEFGHI";
actual.Should().StartWith("AB").And.EndWith("HI").And.Contain("EF").And.HaveLength(9)
RuleFor(customer => customer.Surname).NotEmpty();
RuleFor(customer => customer.Forename).NotEmpty().WithMessage("Specify a First Name");
RuleFor(customer => customer.Discount).NotEqual(0).When(customer => customer.HasDiscount);
RuleFor(customer => customer.Address).Length(20, 250);
RuleFor(customer => customer.Postcode).Must(BeAValidPostcode).WithMessage("Specify a valid Postcode");
> Fluent Validations
75Wednesday, May 4, 2011
Arquitectura de Proyectos ITBPM – Business Process Management
77
“Conjunto de las fases sucesivas de un fenómeno natural o de una operación artificial”
RAE“Un proceso de negocio es un conjunto de tareas
relacionadas lógicamente llevadas a cabo para lograr un resultado definido”
Wikipedia
¿Qué es un proceso?
Wednesday, May 4, 2011
Arquitectura de Proyectos ITBPM – Business Process Management
78
¿Qué es una regla de negocio?
Describe políticas, normas, operaciones, definiciones y restricciones
Ejemplo: “Si a un cliente se le factura mas de $10000
mensualmente, es un cliente tipo A” “A los clientes tipo A se les hace un descuento del 15%
sobre facturas superiores a $3000”
Wednesday, May 4, 2011
Arquitectura de Proyectos ITBPM – Business Process Management
79
¿Qué es BPM?
“Es un enfoque sistemático para mejorar los procesos de negocio de una compañía”
www.cio.com“… Una mezcla de administración de procesos con
tecnologías de integración… para dar soporte a una rica interacción humana y una profunda integración de
aplicaciones.” Gartner
Wednesday, May 4, 2011
Arquitectura de Proyectos ITBPM – Business Process Management
80
Componentes de BPM como enfoque
Experiencia Disciplinas Organizacionales
Control y Management
Socios y Servicios
Wednesday, May 4, 2011
Arquitectura de Proyectos ITBPM – Business Process Management
81
Componentes de BPM como suite SW
BPM Layer
Front end cliente Monitoreo y análisis
Diseño y simulación de procesos
Motor de procesos Motor de reglas
Monitoreo y adm
inistración
Capa SOA
Wednesday, May 4, 2011
Arquitectura de Proyectos ITBPM – Business Process Management
82
BPM vs Otras soluciones
Aplicación separada
WorkflowDepartamental
Workflow Mul)departamental
BPM Empresarial
Ruteo de imágenes y documentación
Ruteo de imágenes y documentación
Ruteo de imágenes y documentación
Ruteo de imágenes y documentación
Formularios electrónicos
Formularios electrónicos
Formularios electrónicos
Motor de reglas Motor de reglas
Broker de integraciónServicios de integración
PortalesPortales &
colaboración
Análisis de procesos
BAM
Manejo de eventos
Wednesday, May 4, 2011
Arquitectura de Proyectos ITBPM – Business Process Management
83
BPM – alternativas en el mercadoOpen Source
World Class
Wednesday, May 4, 2011