Hoy me gustaría hablar sobre patrones de diseño, desde mi experiencia personal unos grandes desconocidos hasta hace poco. ¿Que son? ¿Que utilidad tienen? ¿Son para mí?
¿Que son los patrones de diseño?
Seguramente cuando te enfrentas a un problema por primera vez, alguien ya se ha enfrentado a él en el pasado, eso lo sabemos muy bien al buscar soluciones en páginas como stackoverflow, y muy probablemente ese problema se pueda modelar de una forma parecida o similar.
Si la estructura de clases que existen se pueden exportar, reutilizar y extraer sin importar la aplicación en la que la estamos usando, en este caso nos encontramos ante un patrón de diseño de software.
El concepto de patrón de diseño puede parecer nuevo, pero existe desde los años 70 y se popularizó en los 90 gracias al libro libro de Design Pattern de la Banda de los Cuatro (Gang of Four), Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides. En él explican 23 patrones de diseño, que desde entonces han sido un referente.
¿Que utilidad tienen?
- Nos ahorran tiempo
Si siempre que empezamos una aplicación lo hacemos siguiendo las mismas pautas, y dentro de cada una de estas aplicaciones seguimos una serie de reglas (las clases de negocio están en un package determinado, etc…) ahorramos un tiempo que podemos emplear para otras tareas.
Si seguimos esas reglas que se saben que funcionan sabemos que estamos usando algo que funciona. Una vez los conocemos contamos con un conjunto de “trucos”, de reglas, de herramientas muy probadas, que nos permitirán solucionar la mayor parte de tus problemas de forma directa, sin tener que pensar en si válidas son, o si puede haber una alternativa mejor.
- Nos ayudan a estar seguro de la validez del código
Este punto va relacionado con el anterior, cuando empezamos a desarrollar algo nuevo siempre nos preguntamos si lo estamos haciendo de la forma adecuada, quizás después de bastante tiempo lo finalizamos, y aunque funciona, siempre nos queda la duda de si lo podríamos haber modelado mejor.
Siguiendo los patrones de diseño son usados por millones de personas, y si elegimos el patrón adecuado para el problema concreto no sólo habremos ahorrado un tiempo precioso sino que además estaremos seguro de haber usado una de las mejores soluciones posible para nuestro problema.
- Establecen unas pautas
Desde mi punto de vista es uno de los puntos más importantes, sobre todo si se trabaja en equipo.
Cuando todo está perfectamente definido y se siguen una directrices para desarrollar el código, es mucho más fácil de explicar a los demás (conozcan o no tu código) como funciona, como está implementado…
Al usar todos las mismas pautas el equipo avanzará más rápido y todos en la misma dirección.
¿Que patrón elijo para mi problema?
He aquí la gran pregunta, existen multitud de patrones y cada uno es adecuado para un problema y/o un entorno.
No es lo mismo realizar una aplicación nativa Android o iOS que usar una solución cross-platform con Xamarin.
Android por ejemplo, no tiene un diseño “establecido” aunque últimamente se está extendiendo el uso del patrón MVP (Model-View-Presenter). En el siguiente enlace tenéis un muy buen artículo hablando sobre él: http://www.limecreativelabs.com/mvp-android, o si lo preferís en inglés: https://antonioleiva.com/mvp-android/
iOS debido a su arquitectura y a los consejos que da Apple al respecto, usa MVC (Model-View-Controller) para sus aplicaciones. Podéis ver un artículo sobre este punto: https://www.efectoapple.com/patron-diseno-model-view-controller-mvc/
Para aplicaciones cross-platform con Xamarin tampoco hay un patrón definido, pero se recomienda el uso del patrón MVVM (Model-View-ViewModel). En el siguiente artículo podéis leer más al respecto: https://miguelgomez.io/xamarin/patron-mvvm-xamarin-forms/
¿Que patrón de diseño usáis en vuestras aplicaciones? ¿Lo veis útil o por el contrario consideráis que es un esfuerzo que no merece la pena?