Robert C. Martin en uno de sus libros menciona la viscosidad como un síntoma del diseño de descomposición. No entiendo completamente la idea de la viscosidad en el desarrollo de software. ¿Podría darme algunos ejemplos?Diseño de putrefacción y viscosidad
Respuesta
Tiene dos usos, la viscosidad del diseño y la viscosidad del medio ambiente.
En primer lugar, los fluidos con alta viscosidad, como la pasta de dientes y la mantequilla de maní, no fluyen tan suavemente como fluidos de baja viscosidad como el agua.
El diseño de alta viscosidad hace que sea más fácil crear un hack que preservar el diseño. El truco hace que el código sea aún más rígido, aumentando aún más la viscosidad.
La viscosidad del entorno se refiere al flujo de trabajo. Si los tiempos de compilación son largos, o es complicado construir el sistema o ejecutar las pruebas, los programadores tomarán atajos para aliviar el dolor.
A medida que el código se hace más viejo, se vuelve más lleno de piratas informáticos, y está más lleno de dependencias, y en consecuencia se vuelve más difícil de cambiar sin romper algo.
Por lo tanto, se vuelve menos "fluido" y más "sólido", de ahí la analogía con la viscosidad.
La viscosidad es la capacidad de un líquido para resistir los cambios de las fuerzas externas. El agua es la base de la medida y tiene una viscosidad muy baja (es decir, fluirá libremente de un lugar a otro dado un camino), mientras que, por ejemplo, el yogur que tiene una viscosidad tan alta cuando está frío que es casi sólido y bonito queda mucho donde lo pones (a menos que estés usando pantalones de color claro, en cuyo caso siempre encuentra su camino allí ...).
En software, esto se traduce en cuánto resiste su código. Si tiene muchas dependencias, entonces puede ser difícil alterar una clase principal, lo que lleva a soluciones alternativas menos que ideales, que a su vez aumentan la resistencia del código (aumentando su viscosidad). El código bien diseñado (baja viscosidad) se puede actualizar y agregar sin tener un impacto importante en las aplicaciones u otras clases que dependen de él.
- 1. Diseño de software y diseño de servicios web
- 2. Código de diseño y estructura
- 3. Patrón de diseño y UML
- 4. Patrones de diseño y Scala
- 5. Guardar y restaurar aplicaciones y diseño
- 6. std :: tuple y diseño estándar
- 7. OO diseño y dependencias circulares
- 8. Diseño por contratos y constructores
- 9. rails 3.2 subdominios y diseño
- 10. diseño de diseño de Android
- 11. Eventos y delegados. ¿Qué patrón de diseño?
- 12. Interfaces de usuario - Colores y diseño
- 13. GWT desarrollo y patrones de diseño
- 14. Diseño y plantilla de correo propio localizado
- 15. Patrones de diseño: Fábrica y Repositorio
- 16. Diseño de Android con ListView y botones
- 17. Elementos ContextMenu y ContextMenu de diseño
- 18. ViewSwitcher altura y el diseño de Android
- 19. Diseño de autentificación API y hackability
- 20. Diseño del compilador y clase de construcción
- 21. Diseño de mosaico con CSS y HTML
- 22. Organización y diseño de archivos Javascript
- 23. Nuevos patrones de diseño/estrategias de diseño
- 24. Conferencias de video de diseño de diseño
- 25. Documentos de diseño (documentos de diseño de alto y bajo nivel)
- 26. Preguntas de diseño de SOA y WCF: ¿Es este un diseño de sistema inusual?
- 27. Principios de diseño, mejores prácticas y patrones de diseño para C (o programación procedimental en general)?
- 28. Primeros pasos con el diseño de software utilizando MVC, OO y patrones de diseño
- 29. ETL Diseño y rendimiento del procesamiento
- 30. Contenedores IoC y diseño impulsado por dominio