SlideShare una empresa de Scribd logo
1 de 19
Patrones para Mortales
Specification Pattern en C#
Germán Küber
Software Architect
Net-Baires
http://germankuber.com.ar
@germankuber
https://slack.net-baires.com.ar/
>_
EVENTUM
EVENTUM – Requerimientos (Consultas)
1. Filtrar por cantidad mínima de invitados
2. Filtrar por eventos validos
3. Filtrar por eventos con fecha valida
• Debe de faltar mas de 2 días para el evento
4. Filtrar por eventos premium
• No importa si la fecha es valida
• No importa si el evento esta validado
DEMO
EVENTUM
EVENTUM – Requerimientos
1. Cerrar eventos validos
• Eventos ya validados
• Eventos con fecha valida
2. Cerrar eventos Premium
• Eventos validos o premium
DEMO
“El patrón de especificación es un patrón que
nos permite encapsular parte del conocimiento
del dominio en una sola unidad (especificación)
y reutilizarlo en diferentes partes de la base del
código.”
¿Por qué patrón Specification?
• Evita la duplicación de reglas de negocio
• Provee una sintaxis declarativa
http://bit.ly/spec-pattern
Domain-Driven Design:
Tackling Complexity in the
Heart of Software
By Eric Evans
Patrón Specification
• Búsqueda en Base de Dato
• Validaciones en Memoria
• Construcción de objetos
Como trabaja LinQ
if (events.Any(x=> x.Guests >= 15))
{
//…
}
return context.Events
.Where(x => x.Guests >= 15)
.ToList();
Ejecuta en memoria Ejecuta en SQL
Guests >= 15
Como trabaja LinQ
return context.Events
.Where(x => x.Guests >= 15)
.ToList();
IEnumerable IQueryable
new [] { 1, 2 }.Where(x => x == 1);
DEMO
Guía de diseño
• Evitar implementar interfaces ISpecification
• Specifications lo mas especificas posibles
• Specifications Inmutables
Cuando no usar Specification?
• Aplicaciones muy simples
• Los costos de mantenimiento son bajos
• Los beneficios no justifican la inversión
>_
Gracias!!!
http://germankuber.com.ar
@germankuber
https://slack.net-baires.com.ar/

Más contenido relacionado

Similar a Specification

5. construccion de modelos de calidad
5. construccion de modelos de calidad5. construccion de modelos de calidad
5. construccion de modelos de calidad
Juan Pablo Carvallo
 
GXflow: Próximos Pasos
GXflow: Próximos PasosGXflow: Próximos Pasos
GXflow: Próximos Pasos
GeneXus
 

Similar a Specification (20)

Destino la Nube 2012 - ALM para Azure
Destino la Nube 2012 - ALM para AzureDestino la Nube 2012 - ALM para Azure
Destino la Nube 2012 - ALM para Azure
 
Especificación de Arquitectura de Software
Especificación de Arquitectura de SoftwareEspecificación de Arquitectura de Software
Especificación de Arquitectura de Software
 
JS Patterns Applied to a Real World Example
JS Patterns Applied to a Real World ExampleJS Patterns Applied to a Real World Example
JS Patterns Applied to a Real World Example
 
Gestion de proyectos informaticos 2013 2
Gestion de proyectos informaticos 2013 2Gestion de proyectos informaticos 2013 2
Gestion de proyectos informaticos 2013 2
 
Formularios al limite
Formularios al limiteFormularios al limite
Formularios al limite
 
5. construccion de modelos de calidad
5. construccion de modelos de calidad5. construccion de modelos de calidad
5. construccion de modelos de calidad
 
Espoch
EspochEspoch
Espoch
 
Demostración: ¿Cómo acelera la plataforma Denodo su tiempo para obtener infor...
Demostración: ¿Cómo acelera la plataforma Denodo su tiempo para obtener infor...Demostración: ¿Cómo acelera la plataforma Denodo su tiempo para obtener infor...
Demostración: ¿Cómo acelera la plataforma Denodo su tiempo para obtener infor...
 
Ingenieria de softwrae vol1 v4 2
Ingenieria de softwrae vol1 v4 2Ingenieria de softwrae vol1 v4 2
Ingenieria de softwrae vol1 v4 2
 
Ingenieria de softwrae vol1 v4 2
Ingenieria de softwrae vol1 v4 2Ingenieria de softwrae vol1 v4 2
Ingenieria de softwrae vol1 v4 2
 
¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?
 
Módulos en Zend Framework 2
Módulos en Zend Framework 2Módulos en Zend Framework 2
Módulos en Zend Framework 2
 
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdf
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdfArquitecturas de Programación Avanzadas en NI LabVIEW.pdf
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdf
 
GXflow: Próximos Pasos
GXflow: Próximos PasosGXflow: Próximos Pasos
GXflow: Próximos Pasos
 
Parte practica
Parte practicaParte practica
Parte practica
 
Estimacion agil proyectos Software Scrum
Estimacion agil proyectos Software ScrumEstimacion agil proyectos Software Scrum
Estimacion agil proyectos Software Scrum
 
Estimacion agil proyectos Software Scrum
Estimacion agil proyectos Software ScrumEstimacion agil proyectos Software Scrum
Estimacion agil proyectos Software Scrum
 
Iniciación Con CakePHP
Iniciación Con CakePHPIniciación Con CakePHP
Iniciación Con CakePHP
 
Taller de TDD con .NET y xUnit
Taller de TDD con .NET y xUnitTaller de TDD con .NET y xUnit
Taller de TDD con .NET y xUnit
 
Procesos de Software EGEL-UNITEC
Procesos de Software EGEL-UNITECProcesos de Software EGEL-UNITEC
Procesos de Software EGEL-UNITEC
 

Más de Germán Küber

Más de Germán Küber (20)

Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en Rust
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
Mev Rapido.pptx
Mev Rapido.pptxMev Rapido.pptx
Mev Rapido.pptx
 
Que son los smart contracts.pptx
Que son los smart contracts.pptxQue son los smart contracts.pptx
Que son los smart contracts.pptx
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 meses
 
Patrones funcionales
Patrones funcionalesPatrones funcionales
Patrones funcionales
 
Patrones de diseño en solidity
Patrones de diseño en solidityPatrones de diseño en solidity
Patrones de diseño en solidity
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architecture
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 meses
 
Diamon pattern presentation
Diamon pattern presentationDiamon pattern presentation
Diamon pattern presentation
 
Patrones funcionales
Patrones funcionalesPatrones funcionales
Patrones funcionales
 
Defensive code
Defensive codeDefensive code
Defensive code
 
Programación Funcional C#
Programación Funcional C#Programación Funcional C#
Programación Funcional C#
 
Unit testing consejos
Unit testing   consejosUnit testing   consejos
Unit testing consejos
 
Defensive code C#
Defensive code C#Defensive code C#
Defensive code C#
 
Event sourcing
Event sourcingEvent sourcing
Event sourcing
 
C sharp 8
C sharp 8C sharp 8
C sharp 8
 
Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.
 
Un mundo sin if. generics al rescate
Un mundo sin if. generics al rescateUn mundo sin if. generics al rescate
Un mundo sin if. generics al rescate
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para Desarrolaldores
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (15)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

Specification

Notas del editor

  1. El componente solo puede conocer las capas del sistema en el que vive Esto permite agregar caches,. Proxys. Balanceadores de carga Entiende que los servidores estan en constante cambio Entiende que la red no es segura por lo que limita los contextos. Puede administrarse mejor dado que cada persona puede administrar su propio contexto. Escalabilidad Manajabilidad Cliente > proovedor > empresa > base de datos
  2. Hoy estoy acá con ustedes, no para enumerarles una lista de pros y contras de porque este patrón de diseño. Tampoco para mostrarles un ejemplo de manual, como podemos estar acostumbrados a ver y escuchar ni mucho menos para venderles un patrón de diseño. Hoy estoy acá con la intención de generales cucuriosidad. con la intención de mostrarles una alternativa al código que habitualmente escribimos. Hoy estoy acá con la ilusión de transmitirles una única necesidad: la necesidad de entender que nuestro código SIEMPRE puede ser cada mejor.
  3. El componente solo puede conocer las capas del sistema en el que vive Esto permite agregar caches,. Proxys. Balanceadores de carga Entiende que los servidores estan en constante cambio Entiende que la red no es segura por lo que limita los contextos. Puede administrarse mejor dado que cada persona puede administrar su propio contexto. Escalabilidad Manajabilidad Cliente > proovedor > empresa > base de datos
  4. El componente solo puede conocer las capas del sistema en el que vive Esto permite agregar caches,. Proxys. Balanceadores de carga Entiende que los servidores estan en constante cambio Entiende que la red no es segura por lo que limita los contextos. Puede administrarse mejor dado que cada persona puede administrar su propio contexto. Escalabilidad Manajabilidad Cliente > proovedor > empresa > base de datos
  5. DRY Principle Aumenta la mantenibilidad de nuestro código Introducico por Eric Evan y Martin Fowler principios del año 2000
  6. Encapsular conocimiento de negocio en una clase particular No tienen mucho en comun
  7. 2. Es una expression no se ejecuta en memoria si no que se compilaFunc<int, bool> func = x => x == 1;
  8. 2. Hay dos tipos de métodos de extensión que trabajan sobre ellos La matriz implementa Ienumerable Es una versión de Iqueruable porque implementa la interface En la segunda versión no es un delegado si no una expression Una lambda expression puede ser compilado a delegado o a una expression Lambda se compilara a un delegado Tambien compilara a una expression
  9. El componente solo puede conocer las capas del sistema en el que vive Esto permite agregar caches,. Proxys. Balanceadores de carga Entiende que los servidores estan en constante cambio Entiende que la red no es segura por lo que limita los contextos. Puede administrarse mejor dado que cada persona puede administrar su propio contexto. Escalabilidad Manajabilidad Cliente > proovedor > empresa > base de datos
  10. Define toda la comunicación entre servidores como la de un cliente con un servidor Separacion de responsabilidades entre cliente y servidor Evolucion independiente Los clientes solo conocen a los SERVIDORES y no los servidores a los CLIENTES Portabilidad de clientes Evolucion independiente
  11. No construimos una app sin estados Todo estado del cliente se mantiene en el cliente y se envia en la solicitud Evita sincronizacion entre servidores, y evita flujos complejos Si la conexión se cae , no pierdo el estado ya que le estado viaja en el request Pueden vivir app intermedias que sean capaz de aplica capas de seguridad Visibilidad Relaibility > si cae un servidor reinicio el workflow Escalabilidad
  12. Espero haberles generado esa curiosidad que les hable en un principio. Espero que hayan descubierto, espero haberles mostrado una forma diferente de hacer las cosas. Como pueden ver pasamos la mayor parte de la presentación entendiendo el problema, entendiendo la evolución natural de nuestra aplicación. Como pueden ver comenzamos con un diseño sencillo que poco a poco se fue complejizando, y fue esta complejidad la que sugirió que nuestro código estaba evolucionando en la dirección equivocada. Y esta evolución misma fue la que nos presento la necesidad de aplicar este patrón de diseño que acabo de presentarles. Espero que hoy de aca se lleven lo que vine a contarles lo que vine a mostrarles. Espero que hoy de aca se lleven principalmente una idea en sus cabezas, que pese a que nuestro código inicial estaba bien nada nos pr