SlideShare una empresa de Scribd logo
1 de 85
Descargar para leer sin conexión
Replanteamiento
de diseño de
Software
#PhpirstAid
#scbcn15 // #PhpirstAid
¡Bienvenidos!
Soy Javier Ferrer González
@JavierCane en Twitter
Desarrollador web en @uvinum_es
Gañán en @CodelyTV
#scbcn15 // #PhpirstAid
Agenda
Contexto Objetivos
Plan de acción Conclusiones
Problemas
#scbcn15 // #PhpirstAid
Agenda
Exploración Objetivos del
paciente
Tratamiento Diagnóstico
final
Síntomas
#scbcn15 // #PhpirstAid
Exploración1
Uvinum: Marketplace bebidas alcohólicas
#scbcn15 // #PhpirstAid
El paciente
ESTÁ VIVO
151.000.000
Peticiones mensuales de media
#scbcn15 // #PhpirstAid
Oficina
Web disponible en 14 países
#scbcn15 // #PhpirstAid
5
Años en activo
2M €
Inversión total en 3 rondas
6 / 22
Desarrolladores / Empleados totales
#scbcn15 // #PhpirstAid
Objetivos del paciente2
#scbcn15 // #PhpirstAid
1. Aumentar tolerancia a cambios (Ejemplo API)
Placeyourscreenshot
here
“
#scbcn15 // #PhpirstAid
Walking on water and developing software from
a specification are easy if both are frozen
-Edward V. Berard
“
#scbcn15 // #PhpirstAid
Las especificaciones CAMBIAN
-Sabiduría popular
“
#scbcn15 // #PhpirstAid
Las especificaciones LAS CAMBIAMOS
#scbcn15 // #PhpirstAid
2. Permitir una correcta implementación de test
#scbcn15 // #PhpirstAid
Pirámide de test
#scbcn15 // #PhpirstAid
Software testing ice-cream cone anti-pattern
#scbcn15 // #PhpirstAid
3. Evitar muerte por deuda técnica (velocidad de desarrollo)
#scbcn15 // #PhpirstAid
Muerte por deuda técnica
#scbcn15 // #PhpirstAid
Deuda técnica
#scbcn15 // #PhpirstAid
Complejidad accidental vs. Complejidad esencial
Complejidad esencial
Complejidad accidental
Complejidadsistema
Tiempo
#scbcn15 // #PhpirstAid
4. Sentir motivación por cómo hacemos lo que hacemos
(Software Craftsmanship)
#scbcn15 // #PhpirstAid
Síntomas3
#scbcn15 // #PhpirstAid
1ª visita
~Finales 2014
#scbcn15 // #PhpirstAid
“El que avisa traiciona”
#scbcn15 // #PhpirstAid
Síntomas
■ Falta de test
■ Código altamente acoplado
■ Al framework (clases Controller y Model)
■ A librerías externas
■ A implementaciones concretas
■ Falta de modelado del dominio
■ “Modelos” obesos
■ Controladores obesos
■ Código de difícil lectura
#scbcn15 // #PhpirstAid
■ Falta de test => Reticencia al cambio/descontrol
■ Alto acoplamiento => Poca cambiabilidad
Síntomas
#scbcn15 // #PhpirstAid
Primer diagnóstico: “Borchenoso”
#scbcn15 // #PhpirstAid
Tratamiento4
#scbcn15 // #PhpirstAid
Tratamiento por etapas
Diseño
“alto nivel”
Procesos
Transferencia conocimiento
Replanteamiento
diseño “bajo nivel”
#scbcn15 // #PhpirstAid
■ OOP
■ Clean Code
■ Code Smells
■ Refactoring
■ Principios SOLID
■ Object calisthenics
Etapa diseño a “bajo nivel”
■ Composition Over
Inheritance
■ Tell don’t ask
■ Ley de Demeter
■ DRY
■ YAGNI
■ …
#scbcn15 // #PhpirstAid
Clean Code - Naming
Clean Code Refactoring - Antes
#scbcn15 // #PhpirstAid
Clean Code Refactoring - Después
■ Naming
■ Guard clause
■ Extract method
■ Introduce
explanatory variable
Diseño “alto nivel” -> Domain-Driven Design
#scbcn15 // #PhpirstAid
Arquitectura Hexagonal
#scbcn15 // #PhpirstAid
Arquitectura Hexagonal
■ Ports & Adapters
■ Programación contra contratos / DIP FTW
■ Separación en capas
■ Cambiabilidad
■ Regla de dependencia de fuera hacia dentro
■ Bajo acoplamiento
#scbcn15 // #PhpirstAid
■ Hexagonal Architecture, @fideloper
■ Hexagonal Architecture with PHP, @buenosvinos
■ Repo
■ Application Services vs. Infrastructure Services vs. Domain
Services, @BenNadel
Takeaways
Capas Arquitectura Hexagonal
DDD - Agregados
DDD - Agregados - Clientes
DDD - Value Objects
#scbcn15 // #PhpirstAid
Usando agregados y demás para listados
■ 1 Query por AR
■ Agregados pequeños
=> Muchas queries
■ MUCHAS:
■ No vale cache
■ Complejidad
#scbcn15 // #PhpirstAid
Usando agregados y demás para listados
#scbcn15 // #PhpirstAid
Usando Write Model para listados
#scbcn15 // #PhpirstAid
DDD - Read Model
■ Ataca a la misma BBDD (progresivo)
■ Permite violar restricciones del Write Model (WM)
para optimizar rendimiento
■ No usa el dominio del WM para evitar pervertirlo
■ Basado en DTOs
DDD - Read Model
#scbcn15 // #PhpirstAid
Takeaways
■ Validation in DDD, @eulerfx
■ Read-models as a Tactical Pattern in DDD,@eulerfx
#scbcn15 // #PhpirstAid
Read Model Composer
■ Finalidad: Agilizar desarrollo Read Model
■ Reutilizar DTOs y “repositorios dependientes”
■ Tradeoff que decidimos asumir :)
Read Model Composer Builder - Uso
#scbcn15 // #PhpirstAid
Read
Model
Compos
er
Builder
-
Implem
entació
n
Read Model Composer Builder - Implementación
#scbcn15 // #PhpirstAid
Read Model Composer Builder - Definición servicio
#scbcn15 // #PhpirstAid
Read Model Composer Builder -
Implementación Projector
RM Composer Builder - Implementación Projector
#scbcn15 // #PhpirstAid
Read Model Composer Builder -
Implementación Projector
RM Composer Builder - Implementación Joiner
#scbcn15 // #PhpirstAid
RM Composer Builder - Diagrama de clases
Procesos -> Composer + CI
“
#scbcn15 // #PhpirstAid
Sólo conseguiremos anular la reticencia
al cambio con procesos que no generen
fricción innecesaria
#scbcn15 // #PhpirstAid
Elementos introducidos
■ Actualización PHP 5.6
■ Composer
■ Continuous Deployment: Push a master => deploy
■ Único repositorio
■ GitHub
■ Capistrano
Transferencia conocimiento -> Rethinking Code
#scbcn15 // #PhpirstAid
Cómo implicar al equipo
#scbcn15 // #PhpirstAid
Sesiones Rethinking Code
■ Semanalmente
■ 2 - 3 horas
■ Equipo arquitectura
■ Informales
■ Casos prácticos
#scbcn15 // #PhpirstAid
Sesiones Rethinking Code - Diseño “a bajo nivel”
1. Controllers menos Controllers
2. SOLIDificando Verticomm
3. Code Smells
4. Refactoring, Clean Code & Tips
5. Composition over Inheritance & Design Patterns
6. Shotgun Surgery, DTOs & DIC
#scbcn15 // #PhpirstAid
Hablar de SOLID en un entorno legacy
#scbcn15 // #PhpirstAid
Takeaways
■ The SOLID Principles, @Tutsplus
■ Code Smells & Refactorings, @RefactoringGuru
■ Design Patterns, SourceMaking
■ Screencasts de SOLID, @CodelyTV
■ Ejemplos de código propio (involucrar, motivación)
#scbcn15 // #PhpirstAid
Sesiones Rethinking Code - Diseño “a alto nivel” (1/2)
7. Teoría Hexagonal Architecture
8. Workshop Hexagonal Architecture
9. DDD Building Blocks - Value Objects
10. DDD Building Blocks - Values Objects Workshop
11. DDD Building Blocks - Entities & Aggregates
12. DDD Building Blocks - Entities & Aggregates Workshop
#scbcn15 // #PhpirstAid
■ The Two Sides of Domain-Driven Design (DDD), @eulerfx
■ Repo Symfony MPWAR Edition, @Eloipoch y @SergiGP
■ Domain-Driven Design in PHP, @buenosvinos @theUniC y @KeyvanAkbary
■ Implementing Domain-Driven Design, @VaughnVernon
■ Ejercicios con contexto propio (acercar)
Takeaways
#scbcn15 // #PhpirstAid
13. Dominio vs. Aplicación vs. Infraestructura y DI
14. Use Read Model, stay legen...dary, y lo otro ya tal
15. Read Model Workshop
16. Pedidos conjuntos
17. Event Driven Development
Sesiones Rethinking Code - Diseño “a alto nivel” (2/2)
#scbcn15 // #PhpirstAid
Sesiones Rethinking Code - Testing
18. First tests exercises
19. TDD with legos
20. Setting up phpunit,
asserts and testing types
21. …
#scbcn15 // #PhpirstAid
■ TDD and Refactoring with LEGO, Bryan Beecham
Takeaways
#scbcn15 // #PhpirstAid
Diagnóstico final5
#scbcn15 // #PhpirstAid
■ Equipo arquitectura
■ Composer
■ SOLID
■ Dependency Injector Container
■ Arquitectura Hexagonal
■ Lógica desacoplada del framework
■ Eventos
Puntos de inflexión
#scbcn15 // #PhpirstAid
Errores cometidos
■ Gestión inicial del equipo de arquitectura
■ Cuello de botella a la hora de resolver dudas
■ Intentar encajar Write Model en Read Model
■ Subestimar impacto
■ Subestimar Bounded Contexts
“
#scbcn15 // #PhpirstAid
Si tu aplicación no es compleja, no te líes con DDD.
Tira por CRUD y no hay problema.
-Dicho popular
#scbcn15 // #PhpirstAid
¿Existen las “aplicaciones” complejas?
“
#scbcn15 // #PhpirstAid
Una aplicación compleja tendrá partes
donde NO merecerá la pena aplicar DDD
#scbcn15 // #PhpirstAid
Pasito a Pasito Driven Development (PPDD)
#scbcn15 // #PhpirstAid
Trabajo futuro
■ TDD (in progress)
■ BDD
#scbcn15 // #PhpirstAid
Agradecimientos7
#scbcn15 // #PhpirstAid
Equipo técnico Uvinum
@Obokaman@PabloRos @EduFabra@_googol @Madu2789
#scbcn15 // #PhpirstAid
¡Gracias!
¿Preguntas? ¿Comentarios?
Contacto
■ @JavierCane
■ javier.mailserio@gmail.com
■ Codely.TV
#scbcn15 // #PhpirstAid
■ SlidesCarnival Plantilla presentación
■ Fideloper Imágenes Arquitectura Hexagonal
■ Giphy GIFs Zoidberg
■ WallpapersWide Wallpaper Zoidberg
■ Arlo Belshee The 7 stages of naming
■ Watirmelon Testing ice-cream cone anti-pattern
■ Cañita Brava “El que avisa traiciona”
Créditos imágenes

Más contenido relacionado

La actualidad más candente

Refactoring Applications using SOLID Principles
Refactoring Applications using SOLID PrinciplesRefactoring Applications using SOLID Principles
Refactoring Applications using SOLID PrinciplesSteven Smith
 
UX, Front-end and Back-end: How front-end can help these guys?
UX, Front-end and Back-end: How front-end can help these guys?UX, Front-end and Back-end: How front-end can help these guys?
UX, Front-end and Back-end: How front-end can help these guys?Diego Eis
 
SOLID Design Principles applied in Java
SOLID Design Principles applied in JavaSOLID Design Principles applied in Java
SOLID Design Principles applied in JavaIonut Bilica
 
Clean architecture - Protecting the Domain
Clean architecture - Protecting the DomainClean architecture - Protecting the Domain
Clean architecture - Protecting the DomainVictor Rentea
 
Clean architecture on android
Clean architecture on androidClean architecture on android
Clean architecture on androidBenjamin Cheng
 
Clean architecture
Clean architectureClean architecture
Clean architectureLieven Doclo
 
Functional Patterns with Java8 @Bucharest Java User Group
Functional Patterns with Java8 @Bucharest Java User GroupFunctional Patterns with Java8 @Bucharest Java User Group
Functional Patterns with Java8 @Bucharest Java User GroupVictor Rentea
 
Road From Hex. Architecture to Event Sourcing
Road From Hex. Architecture to Event SourcingRoad From Hex. Architecture to Event Sourcing
Road From Hex. Architecture to Event SourcingCarlos Buenosvinos
 
Clean Architecture Applications in Python
Clean Architecture Applications in PythonClean Architecture Applications in Python
Clean Architecture Applications in PythonSubhash Bhushan
 
A Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidA Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidOutware Mobile
 
SOLID Design Principles for Test Automaion
SOLID Design Principles for Test AutomaionSOLID Design Principles for Test Automaion
SOLID Design Principles for Test AutomaionKnoldus Inc.
 
Behavior Driven Development and Laravel
Behavior Driven Development and LaravelBehavior Driven Development and Laravel
Behavior Driven Development and Laravelmarcusamoore
 
Fighting legacy with hexagonal architecture and frameworkless php
Fighting legacy with hexagonal architecture and frameworkless phpFighting legacy with hexagonal architecture and frameworkless php
Fighting legacy with hexagonal architecture and frameworkless phpFabio Pellegrini
 
2012 the clean architecture by Uncle bob
2012 the clean architecture by Uncle bob 2012 the clean architecture by Uncle bob
2012 the clean architecture by Uncle bob GEORGE LEON
 
Continuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With LiquibaseContinuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With LiquibaseAidas Dragūnas
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드Insub Lee
 

La actualidad más candente (20)

Refactoring Applications using SOLID Principles
Refactoring Applications using SOLID PrinciplesRefactoring Applications using SOLID Principles
Refactoring Applications using SOLID Principles
 
UX, Front-end and Back-end: How front-end can help these guys?
UX, Front-end and Back-end: How front-end can help these guys?UX, Front-end and Back-end: How front-end can help these guys?
UX, Front-end and Back-end: How front-end can help these guys?
 
SOLID Design Principles applied in Java
SOLID Design Principles applied in JavaSOLID Design Principles applied in Java
SOLID Design Principles applied in Java
 
Clean architecture - Protecting the Domain
Clean architecture - Protecting the DomainClean architecture - Protecting the Domain
Clean architecture - Protecting the Domain
 
Hexagonal architecture in PHP
Hexagonal architecture in PHPHexagonal architecture in PHP
Hexagonal architecture in PHP
 
Clean architecture on android
Clean architecture on androidClean architecture on android
Clean architecture on android
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Spring boot jpa
Spring boot jpaSpring boot jpa
Spring boot jpa
 
Functional Patterns with Java8 @Bucharest Java User Group
Functional Patterns with Java8 @Bucharest Java User GroupFunctional Patterns with Java8 @Bucharest Java User Group
Functional Patterns with Java8 @Bucharest Java User Group
 
Road From Hex. Architecture to Event Sourcing
Road From Hex. Architecture to Event SourcingRoad From Hex. Architecture to Event Sourcing
Road From Hex. Architecture to Event Sourcing
 
Clean Architecture Applications in Python
Clean Architecture Applications in PythonClean Architecture Applications in Python
Clean Architecture Applications in Python
 
A Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidA Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on Android
 
SOLID Design Principles for Test Automaion
SOLID Design Principles for Test AutomaionSOLID Design Principles for Test Automaion
SOLID Design Principles for Test Automaion
 
Behavior Driven Development and Laravel
Behavior Driven Development and LaravelBehavior Driven Development and Laravel
Behavior Driven Development and Laravel
 
Fighting legacy with hexagonal architecture and frameworkless php
Fighting legacy with hexagonal architecture and frameworkless phpFighting legacy with hexagonal architecture and frameworkless php
Fighting legacy with hexagonal architecture and frameworkless php
 
2012 the clean architecture by Uncle bob
2012 the clean architecture by Uncle bob 2012 the clean architecture by Uncle bob
2012 the clean architecture by Uncle bob
 
Continuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With LiquibaseContinuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With Liquibase
 
BDD and Behave
BDD and BehaveBDD and Behave
BDD and Behave
 
Solid principles
Solid principlesSolid principles
Solid principles
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
 

Destacado

Planteamiento Estratégico Porque muchas veces se Fracasa
Planteamiento Estratégico Porque muchas veces se FracasaPlanteamiento Estratégico Porque muchas veces se Fracasa
Planteamiento Estratégico Porque muchas veces se FracasaJuan Carlos Fernandez
 
Comunicación y Salud: Un Nuevo Planteamiento Estratégico
Comunicación y Salud: Un Nuevo Planteamiento EstratégicoComunicación y Salud: Un Nuevo Planteamiento Estratégico
Comunicación y Salud: Un Nuevo Planteamiento EstratégicoTania Menendez Hevia
 
Repensar la estrategia
Repensar la estrategiaRepensar la estrategia
Repensar la estrategiagsgallego
 
Plan estratégico para replantear la arquitectura de marca
Plan estratégico para replantear la arquitectura de marcaPlan estratégico para replantear la arquitectura de marca
Plan estratégico para replantear la arquitectura de marcaanamahecha
 
Event Programing & Driven Mediator Pattern
Event Programing & Driven Mediator PatternEvent Programing & Driven Mediator Pattern
Event Programing & Driven Mediator Patternripoblet
 
Arquitectura para artesanos
Arquitectura para artesanosArquitectura para artesanos
Arquitectura para artesanosatassani
 
Arquitectura dirigida por eventos
Arquitectura dirigida por eventosArquitectura dirigida por eventos
Arquitectura dirigida por eventosLudwing Rubio
 
Software craftsmanship coaching
Software craftsmanship coachingSoftware craftsmanship coaching
Software craftsmanship coachingPedro Santos
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Javier Eguiluz
 
Arquitectura dirigida a eventos
Arquitectura dirigida a eventosArquitectura dirigida a eventos
Arquitectura dirigida a eventosrehoscript
 
Hexagonal architecture - message-oriented software design
Hexagonal architecture  - message-oriented software designHexagonal architecture  - message-oriented software design
Hexagonal architecture - message-oriented software designMatthias Noback
 
Hexagonal architecture message-oriented software design
Hexagonal architecture   message-oriented software designHexagonal architecture   message-oriented software design
Hexagonal architecture message-oriented software designMatthias Noback
 
Plan de negocios trabajo ya terminado
Plan de negocios trabajo ya terminadoPlan de negocios trabajo ya terminado
Plan de negocios trabajo ya terminadocaterineleyva123
 
COMO ELABORAR UN PLAN DE NEGOCIO
COMO ELABORAR UN PLAN DE NEGOCIOCOMO ELABORAR UN PLAN DE NEGOCIO
COMO ELABORAR UN PLAN DE NEGOCIOemprendedorlug
 

Destacado (20)

Planteamiento Estratégico Porque muchas veces se Fracasa
Planteamiento Estratégico Porque muchas veces se FracasaPlanteamiento Estratégico Porque muchas veces se Fracasa
Planteamiento Estratégico Porque muchas veces se Fracasa
 
El Planeamiento 2
El Planeamiento 2El Planeamiento 2
El Planeamiento 2
 
Comunicación y Salud: Un Nuevo Planteamiento Estratégico
Comunicación y Salud: Un Nuevo Planteamiento EstratégicoComunicación y Salud: Un Nuevo Planteamiento Estratégico
Comunicación y Salud: Un Nuevo Planteamiento Estratégico
 
Repensar la estrategia
Repensar la estrategiaRepensar la estrategia
Repensar la estrategia
 
Plan estratégico para replantear la arquitectura de marca
Plan estratégico para replantear la arquitectura de marcaPlan estratégico para replantear la arquitectura de marca
Plan estratégico para replantear la arquitectura de marca
 
Event Programing & Driven Mediator Pattern
Event Programing & Driven Mediator PatternEvent Programing & Driven Mediator Pattern
Event Programing & Driven Mediator Pattern
 
Arquitectura para artesanos
Arquitectura para artesanosArquitectura para artesanos
Arquitectura para artesanos
 
Arquitectura dirigida por eventos
Arquitectura dirigida por eventosArquitectura dirigida por eventos
Arquitectura dirigida por eventos
 
Software craftsmanship coaching
Software craftsmanship coachingSoftware craftsmanship coaching
Software craftsmanship coaching
 
Plan De Negocios
Plan De NegociosPlan De Negocios
Plan De Negocios
 
Plan de marketing
Plan de marketingPlan de marketing
Plan de marketing
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)
 
Arquitectura dirigida a eventos
Arquitectura dirigida a eventosArquitectura dirigida a eventos
Arquitectura dirigida a eventos
 
Plan de Negocio Empresarial
Plan de Negocio EmpresarialPlan de Negocio Empresarial
Plan de Negocio Empresarial
 
Hexagonal architecture - message-oriented software design
Hexagonal architecture  - message-oriented software designHexagonal architecture  - message-oriented software design
Hexagonal architecture - message-oriented software design
 
Hexagonal architecture message-oriented software design
Hexagonal architecture   message-oriented software designHexagonal architecture   message-oriented software design
Hexagonal architecture message-oriented software design
 
Plan de negocios trabajo ya terminado
Plan de negocios trabajo ya terminadoPlan de negocios trabajo ya terminado
Plan de negocios trabajo ya terminado
 
COMO ELABORAR UN PLAN DE NEGOCIO
COMO ELABORAR UN PLAN DE NEGOCIOCOMO ELABORAR UN PLAN DE NEGOCIO
COMO ELABORAR UN PLAN DE NEGOCIO
 
Planeación Estratégica
Planeación EstratégicaPlaneación Estratégica
Planeación Estratégica
 
Pasos del Planeamiento Estratégico
Pasos del Planeamiento EstratégicoPasos del Planeamiento Estratégico
Pasos del Planeamiento Estratégico
 

Similar a #PhpirstAid - Replanteamiento de diseño de software

Desarrollo y testeo modular de interfaces HTML5 / MVC - Congo framework
Desarrollo y testeo modular de interfaces HTML5 / MVC - Congo frameworkDesarrollo y testeo modular de interfaces HTML5 / MVC - Congo framework
Desarrollo y testeo modular de interfaces HTML5 / MVC - Congo frameworkSantiago Bustelo
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0Luis Ruiz Pavón
 
Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Micael Gallego
 
Arquitectura de web components - Plain Concepts Web Day
Arquitectura de web components - Plain Concepts Web DayArquitectura de web components - Plain Concepts Web Day
Arquitectura de web components - Plain Concepts Web DayPlain Concepts
 
Desarrollo tecnologias software_libre_open_source
Desarrollo tecnologias software_libre_open_sourceDesarrollo tecnologias software_libre_open_source
Desarrollo tecnologias software_libre_open_sourceMario IC
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7Luis Ruiz Pavón
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open sourcescrumecuador
 
DevOps con Visual Studio Team Services
DevOps con Visual Studio Team ServicesDevOps con Visual Studio Team Services
DevOps con Visual Studio Team ServicesLuis Fraile
 
Personalinformatico jaenes
Personalinformatico jaenesPersonalinformatico jaenes
Personalinformatico jaenesDavidJaenes
 
Uso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomlaUso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomlaRoberto Segura
 
Charla C++
Charla C++Charla C++
Charla C++yiown
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoFinizens
 
APCSIS - Escuela de Código.pptx
APCSIS - Escuela de Código.pptxAPCSIS - Escuela de Código.pptx
APCSIS - Escuela de Código.pptxSuri Sorby RS
 
Entrega contínua en la práctica
Entrega contínua en la prácticaEntrega contínua en la práctica
Entrega contínua en la prácticaCarlos Fuentes
 
Herramientas para desarrollar rápidamente
Herramientas para desarrollar rápidamenteHerramientas para desarrollar rápidamente
Herramientas para desarrollar rápidamenteCarlos Toxtli
 

Similar a #PhpirstAid - Replanteamiento de diseño de software (20)

Desarrollo y testeo modular de interfaces HTML5 / MVC - Congo framework
Desarrollo y testeo modular de interfaces HTML5 / MVC - Congo frameworkDesarrollo y testeo modular de interfaces HTML5 / MVC - Congo framework
Desarrollo y testeo modular de interfaces HTML5 / MVC - Congo framework
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0
 
Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020
 
Arquitectura de web components - Plain Concepts Web Day
Arquitectura de web components - Plain Concepts Web DayArquitectura de web components - Plain Concepts Web Day
Arquitectura de web components - Plain Concepts Web Day
 
Cream code & front performance
Cream code & front performanceCream code & front performance
Cream code & front performance
 
Desarrollo tecnologias software_libre_open_source
Desarrollo tecnologias software_libre_open_sourceDesarrollo tecnologias software_libre_open_source
Desarrollo tecnologias software_libre_open_source
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Curso Php
Curso PhpCurso Php
Curso Php
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open source
 
DevOps con Visual Studio Team Services
DevOps con Visual Studio Team ServicesDevOps con Visual Studio Team Services
DevOps con Visual Studio Team Services
 
Personalinformatico jaenes
Personalinformatico jaenesPersonalinformatico jaenes
Personalinformatico jaenes
 
ASPgems 2018
ASPgems 2018 ASPgems 2018
ASPgems 2018
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
Uso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomlaUso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomla
 
Charla C++
Charla C++Charla C++
Charla C++
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológico
 
Working with a design system
Working with a design systemWorking with a design system
Working with a design system
 
APCSIS - Escuela de Código.pptx
APCSIS - Escuela de Código.pptxAPCSIS - Escuela de Código.pptx
APCSIS - Escuela de Código.pptx
 
Entrega contínua en la práctica
Entrega contínua en la prácticaEntrega contínua en la práctica
Entrega contínua en la práctica
 
Herramientas para desarrollar rápidamente
Herramientas para desarrollar rápidamenteHerramientas para desarrollar rápidamente
Herramientas para desarrollar rápidamente
 

Más de Javier Ferrer González

Redescubre la programación - #MPWAR - #OpenDayLaSalle
Redescubre la programación - #MPWAR - #OpenDayLaSalleRedescubre la programación - #MPWAR - #OpenDayLaSalle
Redescubre la programación - #MPWAR - #OpenDayLaSalleJavier Ferrer González
 
Informática en El Mundo Real - Sesión de orientación
Informática en El Mundo Real - Sesión de orientaciónInformática en El Mundo Real - Sesión de orientación
Informática en El Mundo Real - Sesión de orientaciónJavier Ferrer González
 
#SpyFiles - Análisis de #FinFisher y los Conflictos Políticos del Malware-as-...
#SpyFiles - Análisis de #FinFisher y los Conflictos Políticos del Malware-as-...#SpyFiles - Análisis de #FinFisher y los Conflictos Políticos del Malware-as-...
#SpyFiles - Análisis de #FinFisher y los Conflictos Políticos del Malware-as-...Javier Ferrer González
 

Más de Javier Ferrer González (7)

Redescubre la programación - #MPWAR - #OpenDayLaSalle
Redescubre la programación - #MPWAR - #OpenDayLaSalleRedescubre la programación - #MPWAR - #OpenDayLaSalle
Redescubre la programación - #MPWAR - #OpenDayLaSalle
 
Informática en El Mundo Real - Sesión de orientación
Informática en El Mundo Real - Sesión de orientaciónInformática en El Mundo Real - Sesión de orientación
Informática en El Mundo Real - Sesión de orientación
 
#SpyFiles - Análisis de #FinFisher y los Conflictos Políticos del Malware-as-...
#SpyFiles - Análisis de #FinFisher y los Conflictos Políticos del Malware-as-...#SpyFiles - Análisis de #FinFisher y los Conflictos Políticos del Malware-as-...
#SpyFiles - Análisis de #FinFisher y los Conflictos Políticos del Malware-as-...
 
Gestión proyecto DroidClic android app
Gestión proyecto DroidClic android appGestión proyecto DroidClic android app
Gestión proyecto DroidClic android app
 
Introducción a Ruby on rails
Introducción a Ruby on railsIntroducción a Ruby on rails
Introducción a Ruby on rails
 
Introducción a CoffeeScript
Introducción a CoffeeScriptIntroducción a CoffeeScript
Introducción a CoffeeScript
 
Charla IES Marianao
Charla IES MarianaoCharla IES Marianao
Charla IES Marianao
 

#PhpirstAid - Replanteamiento de diseño de software