Pregunta

Vi esta pregunta sobre C #. Me gustaría una respuesta para PHP. Tengo un código antiguo que tiene 4 páginas de bucles foreach y condiciones que hacen que sea difícil de leer y seguir. ¿Cómo haría esto más OO? Estaba pensando en usar las funciones SPL, pero todavía no entiendo completamente lo que implica.

¿Fue útil?

Solución

Este código probablemente se puede limpiar de manera significativa, y se puede empujar lejos en la dirección de OO, sin tocar SPL.

SPL solo es necesario si desea alterar el comportamiento normal de los objetos en construcciones de lenguaje como foreach (), o en incorporados como count (), o en funciones de acceso a la matriz (tanto el operador [] como las funciones como key (), next ( ) etc.)

Sugerencias de limpieza:

  • Si la misma acción se realiza varias (más de 1 o 2) veces en el código, divídala en una función. Si esta acción se va a realizar en todos los elementos de una matriz, considere usar array_walk . Si caminar por la matriz no encaja por alguna razón, use un bucle :)
  • Si tiene varias instancias de algunos datos conectados semánticamente más complejos que una clave: par de valores, con operaciones asociadas, considere envolverlos en una clase. Pero una asociación formalmente documentada. La matriz puede ser adecuada para usted también. Depende de su estilo y del tipo de datos. Lo importante aquí es la estructuración de los métodos que trabajan en los datos y la documentación. Realmente no importa si lo conviertes en una clase o no.
  • Después de haber realizado los pasos anteriores, divida las funciones y objetos recién escritos en archivos de inclusión separados. Tiendo a envolver casi todo en una clase, así que principalmente tengo una clase pr. expediente. Pero algunas clases auxiliares comparten un archivo con la clase principal, etc. Te darás una idea.

Otros consejos

Si fuera usted, comenzaría escribiendo un código de prueba.

Si puede crear un conjunto de casos de prueba que describan completamente la funcionalidad que está refactorizando, puede continuar y reescribir su código de forma segura sabiendo que seguirá funcionando.

PHPUnit podría ser un buen lugar para comenzar con esto.

Si te entiendo correctamente, tienes bucles foreach (y similares) anidados en 4 páginas de profundidad, y te preguntas si esto OO que has escuchado puede ayudar.

Sin duda, debe seguir adelante y refactorizar su código para reducir los niveles de anidamiento y mejorar la legibilidad, pero no confunda eso con la Orientación de objetos.

OO es una forma de estructurar su código para poner la definición de las estructuras de datos al lado del código que manipula esas estructuras de datos. Si bien uno de sus objetivos clave es ayudar a la legibilidad proporcionando encapsulaciones de complejidad, OO no es la única forma de hacerlo.

Si aún no comprende los conceptos de OO, puede que le resulte más fácil refactorizar su código para separar el código dentro de los bucles internos en funciones separadas que (con suerte) tendrán una tarea única y simple.

No me malinterpretes; Soy un defensor de OO, especialmente como una técnica para proporcionar a los desarrolladores conceptos de alto nivel para discutir el diseño de manera más eficiente. OO bien vale la pena aprender.

Pero no permita que la falta de conocimiento sobre OO le impida extraer el código interno de los bucles y ponerlos en funciones de un solo propósito.

(Si he entendido mal su nivel de conocimiento de OO, mis disculpas.)

Comience lentamente. refactorizar una pieza a la vez.

Si está recorriendo muchas matrices, observe las funciones de la matriz como array_map , array_walk , y amigos. Esto es más una refactorización funcional que una refactorización OO, pero lo llevaría bastante lejos. Si tiene sentido ir más OO, entonces tendrá algunas funciones que luego podría insertar en las clases adecuadas según sea necesario.

Algunos buenos consejos de Johnathan y Gnud. No se preocupe tanto por el SPL, y obtenga más información sobre la refactorización , y vea qué herramientas de refactorización están disponibles para PHP .

Además, no puedo recomendar suficiente lectura Trabajando eficazmente con código heredado :

 texto alternativo

Y, por supuesto, el canónico Refactoring Book :

texto alternativo http://ecx.images-amazon.com/images/I/519XT0DER6L._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU01_.jpg

PHP es un lenguaje difícil de mantener limpio de olores de código, pero con un poco de perseverancia se puede hacer. Y te agradecerás cada día que tengas que mirar tu código base.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top