Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
#PhpirstAid - Replanteamiento de diseño de software Slide 1
#PhpirstAid - Replanteamiento de diseño de software Slide 2
#PhpirstAid - Replanteamiento de diseño de software Slide 3

YouTube videos are no longer supported on SlideShare

View original on YouTube

Upcoming SlideShare
Repensar la estrategia
Repensar la estrategia
Loading in …3
×
1 of 86

#PhpirstAid - Replanteamiento de diseño de software

8

Share

Download to read offline

Ejemplo de replanteamiento de diseño de Software en Uvinum.
Introducir conceptos como Clean Code, Code Smells, Refactoring, Arquitectura Hexagonal, testing, Domain-Driven Design, etc.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

#PhpirstAid - Replanteamiento de diseño de software

  1. 1. Replanteamiento de diseño de Software
  2. 2. #PhpirstAid
  3. 3. #scbcn15 // #PhpirstAid ¡Bienvenidos! Soy Javier Ferrer González @JavierCane en Twitter Desarrollador web en @uvinum_es Gañán en @CodelyTV
  4. 4. #scbcn15 // #PhpirstAid Agenda Contexto Objetivos Plan de acción Conclusiones Problemas
  5. 5. #scbcn15 // #PhpirstAid Agenda Exploración Objetivos del paciente Tratamiento Diagnóstico final Síntomas
  6. 6. #scbcn15 // #PhpirstAid Exploración1
  7. 7. Uvinum: Marketplace bebidas alcohólicas
  8. 8. #scbcn15 // #PhpirstAid El paciente ESTÁ VIVO
  9. 9. 151.000.000 Peticiones mensuales de media
  10. 10. #scbcn15 // #PhpirstAid Oficina Web disponible en 14 países
  11. 11. #scbcn15 // #PhpirstAid 5 Años en activo 2M € Inversión total en 3 rondas 6 / 22 Desarrolladores / Empleados totales
  12. 12. #scbcn15 // #PhpirstAid Objetivos del paciente2
  13. 13. #scbcn15 // #PhpirstAid 1. Aumentar tolerancia a cambios (Ejemplo API) Placeyourscreenshot here
  14. 14. “ #scbcn15 // #PhpirstAid Walking on water and developing software from a specification are easy if both are frozen -Edward V. Berard
  15. 15. “ #scbcn15 // #PhpirstAid Las especificaciones CAMBIAN -Sabiduría popular
  16. 16. “ #scbcn15 // #PhpirstAid Las especificaciones LAS CAMBIAMOS
  17. 17. #scbcn15 // #PhpirstAid 2. Permitir una correcta implementación de test
  18. 18. #scbcn15 // #PhpirstAid Pirámide de test
  19. 19. #scbcn15 // #PhpirstAid Software testing ice-cream cone anti-pattern
  20. 20. #scbcn15 // #PhpirstAid 3. Evitar muerte por deuda técnica (velocidad de desarrollo)
  21. 21. #scbcn15 // #PhpirstAid Muerte por deuda técnica
  22. 22. #scbcn15 // #PhpirstAid Deuda técnica
  23. 23. #scbcn15 // #PhpirstAid Complejidad accidental vs. Complejidad esencial Complejidad esencial Complejidad accidental Complejidadsistema Tiempo
  24. 24. #scbcn15 // #PhpirstAid 4. Sentir motivación por cómo hacemos lo que hacemos (Software Craftsmanship)
  25. 25. #scbcn15 // #PhpirstAid Síntomas3
  26. 26. #scbcn15 // #PhpirstAid 1ª visita ~Finales 2014
  27. 27. #scbcn15 // #PhpirstAid “El que avisa traiciona”
  28. 28. #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
  29. 29. #scbcn15 // #PhpirstAid ■ Falta de test => Reticencia al cambio/descontrol ■ Alto acoplamiento => Poca cambiabilidad Síntomas
  30. 30. #scbcn15 // #PhpirstAid Primer diagnóstico: “Borchenoso”
  31. 31. #scbcn15 // #PhpirstAid Tratamiento4
  32. 32. #scbcn15 // #PhpirstAid Tratamiento por etapas Diseño “alto nivel” Procesos Transferencia conocimiento Replanteamiento diseño “bajo nivel”
  33. 33. #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 ■ …
  34. 34. #scbcn15 // #PhpirstAid Clean Code - Naming
  35. 35. Clean Code Refactoring - Antes
  36. 36. #scbcn15 // #PhpirstAid Clean Code Refactoring - Después ■ Naming ■ Guard clause ■ Extract method ■ Introduce explanatory variable
  37. 37. Diseño “alto nivel” -> Domain-Driven Design
  38. 38. #scbcn15 // #PhpirstAid Arquitectura Hexagonal
  39. 39. #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
  40. 40. #scbcn15 // #PhpirstAid ■ Hexagonal Architecture, @fideloper ■ Hexagonal Architecture with PHP, @buenosvinos ■ Repo ■ Application Services vs. Infrastructure Services vs. Domain Services, @BenNadel Takeaways
  41. 41. Capas Arquitectura Hexagonal
  42. 42. DDD - Agregados
  43. 43. DDD - Agregados - Clientes
  44. 44. DDD - Value Objects
  45. 45. #scbcn15 // #PhpirstAid Usando agregados y demás para listados ■ 1 Query por AR ■ Agregados pequeños => Muchas queries ■ MUCHAS: ■ No vale cache ■ Complejidad
  46. 46. #scbcn15 // #PhpirstAid Usando agregados y demás para listados
  47. 47. #scbcn15 // #PhpirstAid Usando Write Model para listados
  48. 48. #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
  49. 49. DDD - Read Model
  50. 50. #scbcn15 // #PhpirstAid Takeaways ■ Validation in DDD, @eulerfx ■ Read-models as a Tactical Pattern in DDD,@eulerfx
  51. 51. #scbcn15 // #PhpirstAid Read Model Composer ■ Finalidad: Agilizar desarrollo Read Model ■ Reutilizar DTOs y “repositorios dependientes” ■ Tradeoff que decidimos asumir :)
  52. 52. Read Model Composer Builder - Uso
  53. 53. #scbcn15 // #PhpirstAid Read Model Compos er Builder - Implem entació n Read Model Composer Builder - Implementación
  54. 54. #scbcn15 // #PhpirstAid Read Model Composer Builder - Definición servicio
  55. 55. #scbcn15 // #PhpirstAid Read Model Composer Builder - Implementación Projector RM Composer Builder - Implementación Projector
  56. 56. #scbcn15 // #PhpirstAid Read Model Composer Builder - Implementación Projector RM Composer Builder - Implementación Joiner
  57. 57. #scbcn15 // #PhpirstAid RM Composer Builder - Diagrama de clases
  58. 58. Procesos -> Composer + CI
  59. 59. “ #scbcn15 // #PhpirstAid Sólo conseguiremos anular la reticencia al cambio con procesos que no generen fricción innecesaria
  60. 60. #scbcn15 // #PhpirstAid Elementos introducidos ■ Actualización PHP 5.6 ■ Composer ■ Continuous Deployment: Push a master => deploy ■ Único repositorio ■ GitHub ■ Capistrano
  61. 61. Transferencia conocimiento -> Rethinking Code
  62. 62. #scbcn15 // #PhpirstAid Cómo implicar al equipo
  63. 63. #scbcn15 // #PhpirstAid Sesiones Rethinking Code ■ Semanalmente ■ 2 - 3 horas ■ Equipo arquitectura ■ Informales ■ Casos prácticos
  64. 64. #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
  65. 65. #scbcn15 // #PhpirstAid Hablar de SOLID en un entorno legacy
  66. 66. #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)
  67. 67. #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
  68. 68. #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
  69. 69. #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)
  70. 70. #scbcn15 // #PhpirstAid Sesiones Rethinking Code - Testing 18. First tests exercises 19. TDD with legos 20. Setting up phpunit, asserts and testing types 21. …
  71. 71. #scbcn15 // #PhpirstAid ■ TDD and Refactoring with LEGO, Bryan Beecham Takeaways
  72. 72. #scbcn15 // #PhpirstAid Diagnóstico final5
  73. 73. #scbcn15 // #PhpirstAid ■ Equipo arquitectura ■ Composer ■ SOLID ■ Dependency Injector Container ■ Arquitectura Hexagonal ■ Lógica desacoplada del framework ■ Eventos Puntos de inflexión
  74. 74. #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
  75. 75. “ #scbcn15 // #PhpirstAid Si tu aplicación no es compleja, no te líes con DDD. Tira por CRUD y no hay problema. -Dicho popular
  76. 76. #scbcn15 // #PhpirstAid ¿Existen las “aplicaciones” complejas?
  77. 77. “ #scbcn15 // #PhpirstAid Una aplicación compleja tendrá partes donde NO merecerá la pena aplicar DDD
  78. 78. #scbcn15 // #PhpirstAid Pasito a Pasito Driven Development (PPDD)
  79. 79. #scbcn15 // #PhpirstAid Trabajo futuro ■ TDD (in progress) ■ BDD
  80. 80. #scbcn15 // #PhpirstAid Agradecimientos7
  81. 81. #scbcn15 // #PhpirstAid Equipo técnico Uvinum @Obokaman@PabloRos @EduFabra@_googol @Madu2789
  82. 82. #scbcn15 // #PhpirstAid ¡Gracias! ¿Preguntas? ¿Comentarios? Contacto ■ @JavierCane ■ javier.mailserio@gmail.com ■ Codely.TV
  83. 83. #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

×