Robert C. Martin, también conocido como «Uncle Bob», es un defensor del código limpio y ha compartido su opinión sobre el uso de la declaración switch. En su libro «Clean Code», menciona que el uso excesivo de switch puede ser una mala práctica porque viola el principio Open-Closed del SOLID (que establece que las clases deben estar abiertas para la extensión pero cerradas para la modificación).
Sin embargo, esto no significa que debas evitar por completo el uso de’ enum’ con ‘cases’. Los ‘enum’ son una forma efectiva de representar un conjunto de valores relacionados, y en muchos casos, su uso es apropiado y beneficioso.
La clave para utilizar ‘enum’ de manera limpia y eficiente es evitar abusar del uso de switch para manejar diferentes casos de enumeraciones. En lugar de eso, es recomendable utilizar el polimorfismo y la encapsulación para tratar cada caso de enumeración de manera más modular y extensible.
Por ejemplo, puedes implementar el patrón de diseño Visitor para manejar comportamientos específicos de cada ‘case’ en un objeto separado, o puedes utilizar el patrón Strategy para delegar el comportamiento a diferentes clases según el caso de enumeración.
Introducción
La programación en iOS puede ser una pesadilla cuando el código no está limpio. Afortunadamente, los patrones de diseño pueden ayudar en gran medida. Como se detalla a continuación, los patrones de diseño Visitor y Strategy son excelentes alternativas al switch statement, lo que puede mejorar significativamente la legibilidad del código.
¿Qué es un código limpio y por qué es importante?
Un código limpio es aquel que es fácil de leer y mantener. Escribir código limpio es importante porque hace que sea más fácil para ti y tus compañeros de equipo trabajar juntos en el código. Además, el código limpio es más fácil de mantener y actualizar a medida que cambian los requisitos del proyecto. Así que, ¿por qué no tomar el camino más fácil y hacer que tu código sea más legible desde el principio?
¿Qué son los Patrones de Diseño?
Patrones de Diseño son soluciones generales a problemas comunes en el desarrollo de software. Los patrones de diseño permiten a los desarrolladores crear soluciones reutilizables para problemas estándares de programación. Al implementar patrones de diseño, se pueden reducir los errores y aumentar la eficiencia del código. Tipos de patrones de diseño incluyen patrones de creación, patrones de estructura y patrones de comportamiento. Es importante usar patrones de diseño porque pueden ayudar a crear un código limpio, fácil de entender y más mantenible.
El patrón ‘Visitor’
El patrón ‘Visitor‘ es un patrón de comportamiento que se utiliza para separar algoritmos de la estructura de un objeto. Permite definir una nueva operación sin cambiar las clases de los objetos sobre los que opera. En iOS, podemos implementar este patrón utilizando el protocolo ‘Visitor’ y la extensión de clases. Los beneficios de usar este patrón incluyen una mayor flexibilidad y una reducción del acoplamiento entre objetos. Además, permite que el código sea más fácil de mantener y extender en el futuro.
un ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
// Enumeración que representa diferentes tipos de vehículos enum Vehicle { case car case motorcycle case truck } // Protocolo Visitor para calcular el costo de mantenimiento protocol MaintenanceCostVisitor { func visit(car: Double) -> Double func visit(motorcycle: Double) -> Double func visit(truck: Double) -> Double } // Clase que calcula el costo de mantenimiento para cada tipo de vehículo class MaintenanceCalculator: MaintenanceCostVisitor { func visit(car: Double) -> Double { return car * 0.1 } func visit(motorcycle: Double) -> Double { return motorcycle * 0.05 } func visit(truck: Double) -> Double { return truck * 0.2 } } // Función que utiliza el Visitor para calcular el costo de mantenimiento func calculateMaintenanceCost(vehicle: Vehicle, cost: Double) -> Double { let calculator = MaintenanceCalculator() switch vehicle { case .car: return calculator.visit(car: cost) case .motorcycle: return calculator.visit(motorcycle: cost) case .truck: return calculator.visit(truck: cost) } } |
El patrón ‘Strategy’
El patrón ‘Strategy‘ es ampliamente utilizado en el desarrollo de iOS para escribir código limpio y mantenible. Este patrón implica definir un conjunto de algoritmos que pueden intercambiarse según sea necesario, lo que permite la separación de los detalles de implementación del algoritmo para que puedan utilizarse de forma independiente. Al utilizar protocolos y clases en la implementación de iOS, el comportamiento esperado de las clases se define mediante protocolos y las clases proporcionan las implementaciones para ese comportamiento, lo que permite la flexibilidad de intercambiar algoritmos.
El principal beneficio de utilizar el patrón ‘Strategy’ es la clara separación entre la lógica empresarial y los detalles de implementación, lo que hace que el código sea mucho más fácil de entender y mantener a medida que el proyecto crece. Además, el uso del patrón garantiza la consistencia del código, lo que conduce a una mayor calidad y menos errores. Adoptar el patrón ‘Estrategia’ es una excelente manera de escribir código conciso y legible en iOS.
un ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
// Enumeración que representa diferentes tipos de vehículos enum Vehicle { case car case motorcycle case truck } // Protocolo Strategy para calcular el costo de mantenimiento protocol MaintenanceCostStrategy { func calculateCost(cost: Double) -> Double } // Clases que implementan el Strategy para cada tipo de vehículo class CarMaintenanceStrategy: MaintenanceCostStrategy { func calculateCost(cost: Double) -> Double { return cost * 0.1 } } class MotorcycleMaintenanceStrategy: MaintenanceCostStrategy { func calculateCost(cost: Double) -> Double { return cost * 0.05 } } class TruckMaintenanceStrategy: MaintenanceCostStrategy { func calculateCost(cost: Double) -> Double { return cost * 0.2 } } // Función que utiliza el Strategy para calcular el costo de mantenimiento func calculateMaintenanceCost(vehicle: Vehicle, cost: Double) -> Double { var strategy: MaintenanceCostStrategy switch vehicle { case .car: strategy = CarMaintenanceStrategy() case .motorcycle: strategy = MotorcycleMaintenanceStrategy() case .truck: strategy = TruckMaintenanceStrategy() } return strategy.calculateCost(cost: cost) } |
Switch vs Patrones de Diseño
Cuando se decide entre la declaración de casos de switch y los patrones de diseño, es importante considerar la complejidad y la escalabilidad futura de su código. Si bien los casos de switch pueden ser una solución simple y única, los patrones de diseño ofrecen un enfoque más adaptable y mantenible para la arquitectura del código. Con patrones de diseño, puede anticipar cambios potenciales e incorporar fácilmente nuevas características sin reescribir completamente su código. Sin embargo, es importante tener en cuenta que la implementación de patrones de diseño puede requerir más esfuerzo inicial y puede no ser necesaria para proyectos más pequeños y menos complejos. En última instancia, la elección entre la declaración de casos de switch y los patrones de diseño depende de las necesidades y objetivos específicos de su proyecto.
Conclusiones
En resumen, el uso de Patrones de Diseño como el Patrón ‘Visitor’ y el Patrón ‘Strategy’ puede mejorar la escalabilidad y la flexibilidad del software y, por lo tanto, es importante utilizarlos en el desarrollo de software para lograr un código limpio y fácil de mantener en iOS. Al utilizar estos patrones, podemos separar los algoritmos de la estructura del objeto y seleccionar un algoritmo específico dentro de una familia de algoritmos. También podemos reducir el acoplamiento entre objetos y definir un conjunto de algoritmos que pueden intercambiarse según sea necesario. En comparación con el switch statement, los patrones de diseño son una alternativa más legible y mantenible para representar la lógica del software.
¿Qué te pareció usar Visitor o Strategy en lugar de Switch? Déjame tu comentario y no te olvides de compartirla 😄
Comentarios recientes