SlideShare una empresa de Scribd logo
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

PPTX
Buenas Prácticas para la Construcción de Aplicaciones de Software
PPT
Servicios en Zend Framework 2
PDF
Daniel González & Helena Jalain - DevSecOps y la caída de Babilonia: cómo olv...
PPTX
Aplicaciones escalables en Azure
PDF
Análisis estático de código en Java
PPTX
2015 10 - Curso Cliente @firma INAP día 1
PDF
Desarrollo ágil de aplicaciones
PPTX
Presentación de Scrum
Buenas Prácticas para la Construcción de Aplicaciones de Software
Servicios en Zend Framework 2
Daniel González & Helena Jalain - DevSecOps y la caída de Babilonia: cómo olv...
Aplicaciones escalables en Azure
Análisis estático de código en Java
2015 10 - Curso Cliente @firma INAP día 1
Desarrollo ágil de aplicaciones
Presentación de Scrum

Similar a Specification (20)

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

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

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

Último (20)

DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PDF
capacitación de aire acondicionado Bgh r 410
DOCX
Guía 5. Test de orientación Vocacional 2.docx
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PPTX
Presentación de Redes de Datos modelo osi
PDF
MANUAL de recursos humanos para ODOO.pdf
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
Sesion 1 de microsoft power point - Clase 1
PPTX
El uso de las TIC en la vida cotidiana..
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPTX
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
DOCX
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PPTX
modulo seguimiento 1 para iniciantes del
PDF
Influencia-del-uso-de-redes-sociales.pdf
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Propuesta BKP servidores con Acronis1.pptx
Mecanismos-de-Propagacion de ondas electromagneticas
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
capacitación de aire acondicionado Bgh r 410
Guía 5. Test de orientación Vocacional 2.docx
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
Presentación de Redes de Datos modelo osi
MANUAL de recursos humanos para ODOO.pdf
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Sesion 1 de microsoft power point - Clase 1
El uso de las TIC en la vida cotidiana..
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
Estrategia de Apoyo de Daylin Castaño (5).pdf
modulo seguimiento 1 para iniciantes del
Influencia-del-uso-de-redes-sociales.pdf
Power Point Nicolás Carrasco (disertación Roblox).pptx

Specification

Notas del editor

  • #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: 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.
  • #7: 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
  • #14: 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
  • #18: DRY Principle Aumenta la mantenibilidad de nuestro código Introducico por Eric Evan y Martin Fowler principios del año 2000
  • #20: Encapsular conocimiento de negocio en una clase particular No tienen mucho en comun
  • #21: 2. Es una expression no se ejecuta en memoria si no que se compilaFunc<int, bool> func = x => x == 1;
  • #22: 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
  • #23: 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
  • #24: 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
  • #25: 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
  • #26: 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