Cómo evitar el código espagueti con programación orientada a objetos
Resumen
¿Qué es el código espagueti y por qué es importante evitarlo?
El término "código espagueti" se refiere a un código que, al igual que un plato de espagueti, resulta desordenado y difícil de manejar. Esto ocurre generalmente cuando el código está estructurado con numerosas condiciones como if, while y for, todas en un mismo archivo. Tal código, si bien puede resolver problemas inicialmente, es una pesadilla para mantener y mejorar a lo largo del tiempo.
¿Cómo usamos la refactorización para evitar el código espagueti?
La refactorización es una técnica valiosa que nos ayuda a mejorar nuestro código sin cambiar su comportamiento externo. Es esencial resolver el problema inicial lo mejor que podamos. Luego, es importante tomar el tiempo para reorganizar y limpiar nuestro código. He aquí cómo hacerlo:
Escribir el código inicial: Usando if, while, for, funciones, métodos, etc., resuelve el problema.
Refactorizar el código: Toma el código funcional y mejóralo estructurándolo de manera ordenada y lógica, sin cambiar el comportamiento del programa.
¿Cómo organizar el código mediante programación orientada a objetos?
La programación orientada a objetos (POO) nos ofrece herramientas efectivas para estructurar el código de manera que sea mantenible a largo plazo. Implementar POO implica:
Crear métodos lógicos y coherentes: Después de escribir un código funcional, puede que sea necesario dividir grandes estructuras condicionales en métodos más manejables.
defhandle_clients_excel():# Lógica para manejar el Excel de clientesdefhandle_providers_excel():# Lógica para manejar el Excel de proveedores
Utilizar clases: Dividir el código en clases adecuadas según su funcionalidad. Esto facilita su organización y mantenimiento.
classAutenticación:defverificar_credenciales(self):# Lógica de autenticaciónclassEnvíoEmail:defenviar_mensaje(self):# Lógica para enviar correos
Archivos separados por funcionalidad: Organizar el código en diferentes archivos para reducir el tamaño y complejidad de cada archivo individual. Esto simplifica el mantenimiento del sistema.
Autenticación.py contiene toda la lógica de autenticación.
EnvíoEmail.py maneja las operaciones de envío de correos electrónicos.
¿Cómo asegura el mantenimiento y longevidad de los sistemas?
La verdadera rentabilidad en el desarrollo de software no proviene de crear sistemas, sino de garantizar que estos puedan ser mantenidos eficazmente durante años. Siguiendo prácticas como la refactorización y la separación adecuada del código, podemos:
Evitar las deudas técnicas y malos olores en el código.
Facilitar la capacidad de testeo y mantenimiento continuo.
Lograr que el sistema resista al uso constante y evolutivo durante 5 o 10 años.
Siguiendo estos principios, podemos dejar atrás el temido código espagueti y avanzar hacia un desarrollo de software más limpio y organizado, una habilidad que se perfecciona con la práctica y la experiencia. ¡Sigamos aprendiendo y mejorando juntos!
Recuerdo cuando empezaba a programar con PHP, no tenía a nadie que me guiara y acababa realizando mucho código espagueti, llegué al punto que necesitaba hacer cambios y decía: "PEro tengo esta función aquí, pero también la tengo acá, tengo que cambiar muchas funciones" poco a poco fui mejorando mis prácticas.
Creo que el ejemplo más común de código espagueti es cuando mezclas HTML con PHP, acabas creando una chapuza horrible que lo miras y dices "WTF is this?" lo peor que puedes hacer con PHP es imprimir HTML mediante la instrucción echo, en serio, no lo hagas.
Una forma fácil de ejemplificar el código espagueti y una buena solución es, tomando el ejemplo de la clase, un sistema que generará archivos de excel dependiendo de lo que se necesite, podríamos tener algo así:
<?php
if($generar_archivo_para_clientes){// TODO el codigo para generar el Excel para el cliente}else{// Exactamente el MISMO código para generar el Excel para los proveedores}
Aquí estariamos repitiendo código, y lo único que cambia es para quién lo vamos a generar, por lo que una mejor solución podría ser:
<?php
classExcel{publicfunctiongenerar($generar_para){// TODO El codigo para generar el archivo}}$excel =newExcel();if($generar_archivo_para_clientes){ $excel->generar("clientes");}else{ $excel->generar("proveedores");}
Y de esta forma estamos reutilizando código, y solo le tenemos que dar mantenimiento al código una sola vez, y es más legible, por su puesto, podríamos tener la clase en un archivo diferente y cargarla mediante composer...
Genial :)
El código espaguetti mas comun que veo y con el que estoy lidiando es con PHP, SQL y HTML_
Cuando todo esto puede ser llevado a un controlador y dejar el minimo php posible en tu vista.
Código espagueti
Un código espagueti es código que está estructurado mediante if, while, for netamente, todo en un mismo archivo donde solamente buscamos resolver el problema. Cuando creamos código estructurado corremos peligro de crear código espagueti. La OOP nos ayuda evitarlo.
💸 El dinero en esta profesión está en el mantenimiento del código.
Cómo evitar el código espagueti
Resolver el problema
Crea de forma lógica y coherente diferentes métodos que reemplacen tus estructuras de control.
Crea una o varias clases dependiendo el caso.
excelente resumen .... gracias
Buen resumen 💪
MIerd* que tan sesgado estaba, el money no esta en crear sistemas ,esta en mantenerlos, así como cualquier otra profesion, como los tecnicos en mecanica o refrigereación, no les pagan para que hagan un refri o creen un carro nuevo a su cliente.
Ellos mantien funcionando al 100 el carro solo eso y eso es complicado , wou esta fue mi cara cuando Italo dijo eso
Cabe mencionar que soy "notavo co muy poca experiencia laboral" y es por esa la razon de mi expresion
Código Spaghetti código sin ningún tipo de orden. Que funciona pero que no es legible. Esos fueron los principios del desarrollo web con PHP. Poco a poco fuimos profesionalizandonos y el paradigma POO nos terminó de elevar
como evitarlo:
1 resolver el problema.
2 crear de forma lógica métodos coherentes que reemplacen mis estructuras de control/ mejoras al código.
3 crear una o varias clases dependiendo el caso.
Creo que ese fue el inicio de todos, hay que evolucionar
Re factorizar: Es cuando se mejora el código sin modificar el resultado final
😀 Refactoriza tu código para hacerlo mantenible y escalable.
Mi única observación sobre el resumen del curso, es: aun cuando se está hablando de PHP, se utilizaron términos de Python como la definición de las funciones y las extensiones de los archivos. ;-=)
Como desarrolladores es aqui la diferencia entre un desarrollador JR y un SR. , conocer y manejar estos conseptos?
En parte sí, pero un Senior también debe tener muchas habilidades blandas.
Diría que saber estos conceptos no te hace exactamente un Senior, pero si te da un plus frente a otros miles de desarrolladores JR que nunca aprenden POO y buenas prácticas en general en el desarrollo de Software.
En el mundo laboral nos encontraremos con muchas problemáticas las cuales nos obligarán a escribir código espagueti y sin buenas prácticas puede ser por lo apresurado del proyecto final. Sin embargo, refactorizar ese código siempre deberá ser tarea, incluso el código que escribimos desde el inicio con buenas prácticas, podrá ser mejorado de algún modo, siempre pensando en que sea fácil de leer.
Creo que todos cuando empezamos, solo hacemos espagueti...
Una vez un mentor me dijo "Trata de hacer las cosas lo más faciles posibles, no te quiebres la cabeza de más", y es un buen consejo a la hora de empezar a resolver un problema, ya resulto el problema si es necesario la refactorización, comentar el código y pulirlo para llevarlo al commit con git.
Crear de forma lógica métodos coherentes que reemplacen mis estructuras de control
Código espagueti
Hace referencia al plato hondo llego de espagueti, donde todo esta allí revuelto. Con esto se puede comparar con el código cuando programamos de forma estructurada.
Un Código espagueti básicamente es que se encuentra estructurado mediante estructuras condicionales como if, while for etc.
Debemos resolver el problema, luego refactorizar, esto se da cuando mejoramos nuestro código sin alterar su resultado.
Crear las clases necesarias dependiendo del caso.
Para evitar el código espagueti con programación orientada a objetos (POO), sigue estos pasos:
Resuelve el problema inicialmente: Implementa tu solución con código funcional, aunque sea básico.
Refactoriza el código: Una vez que tengas una solución funcional, organiza tu código en métodos lógicos, evitando estructuras condicionales excesivas.
Crea clases adecuadas: Agrupa funciones relacionadas en clases específicas, lo que facilita el mantenimiento y mejora la legibilidad.
La POO facilita la organización y el mantenimiento del código a largo plazo, ayudando a evitar deudas técnicas.
¿Cómo puedo hacerle mantenimiento a un proyecto en código espagueti? ¿Cómo puedo re-factorizarlo?
Aplicar buenas prácticas de programación, revisar las sintaxis y refactorizar
Refactorizar es un proceso interesante porque te ayuda ver diferentes perspectivas de un código que antes era una fatiga leer y que luego sería una maravilla. En parte, la documentación del código también es fundamental para ello. Por ejemplo si tienes una aplicación que es una calculadora, quieres centralizar las operaciones que realiza esta calculadora y separarla completamente de la vista en HTML y CSS. Evita juntar PHP y HTML a toda costa como dice el buen RetaxMaster
Gracias amigo Italo. Excelentes explicaciones. No se podria pedir a un profesor mejor
Despues de varios años en una empresa donde trabaje como programador me di cuenta que estaba creando deuda tecnica, y el programa crecio tanto, que cuando me salí ya no pude refactorizar y ahora es un gran problema para los que alli se quedaron con el mantenimiento.... dolores de cabeza, fallos, pagar grandes cantidades de dinero para contratar a otro programadores, y aún asi no todos quieren entrarle a mantenerlo por lo mal que hule ese codigo. Y es por no haber tenido la tecnica de la POO en ese momento, una lastima. Pero ahora debo aprender a programar con buena técnica. Muchas gracias prof. Italo es un excelente profesor y agradezco mucho que nos comparta ese conocimiento. Gracias.
de acuerdo a lo que dije el Ing. es correcto es mejor crear Clases con metodo Invoke y que no este ligado a metodo si no que cada reporte en su libreria y solo se llame en singleton menos dolores de cabeza