¿Consejos para planificar la reescritura de un proyecto PHP grande?

13

Decidí volver a escribir por completo un marco PHP (con MVC) en el que he estado trabajando, durante años. Mi problema hasta ahora era que solo se me ocurrían ideas, las incluía en Trac como tickets y luego las agregaba, sin preocuparme por el diseño del marco en sí. Con el tiempo, esto ha causado algunos problemas y creo que una reescritura sería útil, sin embargo, no estoy seguro por dónde empezar con la planificación. Sé que no quiero usar Trac, y sé que necesito más que solo Boletos e hitos, pero ¿qué más necesitaría?

Realmente quiero planear a fondo esta reescritura, quiero detallar cada característica que quiero, dónde irá y cómo se conectará con todas las demás partes, pero no tengo experiencia con este nivel de planificación. ¿Algún consejo? ¿Algún programa que ayude? Me estoy cansando de Trac, nunca me ha gustado.

Sé que necesitaré un documento de diseño, pero ¿hay algún diseño determinado que deba seguir? También necesitaré seguimiento de errores, tickets, hitos, etc., pero más allá de Trac, tampoco sé qué es bueno para eso. Estoy seguro de que necesitaré más, pero no tengo idea de qué, así que cualquier ayuda sería apreciada.

    
pregunta Jon 15.09.2011 - 15:49

6 respuestas

7

Vea a continuación algunas cosas que hago al desarrollar un gran proyecto:

1: uso una herramienta de planificación como OpenProj y añado todas las funciones que deseo incluir como tarea. Por ejemplo, ahora mismo estoy trabajando en una función para permitir que mis usuarios inicien sesión automáticamente después de que se registren en mi sitio. Tengo una tarea en mi plan como "feature-autologin".

2 - Soy una tienda de desarrollo para un solo hombre, por lo que generalmente me muevo de una función a otra. Mi plan se crea de manera que todas las características son secuenciales. No invierto mucho tiempo en estimar cuánto tiempo necesitaré para cada función. Usualmente considero que cada uno me tomará un día para desarrollarme. Si uno toma más, simplemente actualizo el plan y todas las tareas futuras se mueven en consecuencia.

3 - Yo uso git extensivamente. Cada característica es una rama. Una vez que complete cada función, la fusiono con la rama de desarrollo y creo una nueva rama para la siguiente función.

4 - Si encuentro un error en el software, creo una pequeña rama de git para corregirlo y volver a fusionarlo una vez que se haya resuelto. Me aseguro de actualizar tanto la rama de desarrollo como la rama de mi característica actual en la que estoy trabajando. Por cierto, el error se convierte en otra tarea en mi plan OpenProj. Algo como "error-mal-dirección". Y cuando lo inserto, todas las demás funciones se mueven hacia atrás en la línea de tiempo.

5 - Mientras estoy desarrollando, si pienso en una nueva función, simplemente la incluyo en el plan donde creo que se ajustará mejor y ajustará la línea de tiempo nuevamente.

Espero que esto ayude. Parece que tienes un proyecto emocionante por delante. Buena suerte!

    
respondido por el jdias 15.09.2011 - 16:18
10

Si va a realizar una reescritura completa, ¿por qué no considera también si debería usar php? Un cambio / actualización de la tecnología podría ser el catalizador que desee para mejorar su diseño / escalabilidad / mantenimiento, etc ...

    
respondido por el NWS 15.09.2011 - 16:23
10

Yo sugeriría refactorizar mucho en su lugar

El problema que anticipas aquí:

  

Realmente quiero planear a fondo esta reescritura, quiero detallar cada característica que quiero, dónde irá y cómo se conectará con todas las demás partes, pero no tengo experiencia con este nivel de planificación. ¿Algún consejo? ¿Algún programa que ayude? Me estoy cansando de Trac, nunca me ha gustado.

es realmente difícil. Es básicamente el modelo de cascada con toda su fealdad. Aquí hay algunas evidencia anecdótica para los problemas con el enfoque de 'reescritura', que llegará a la conclusión: probablemente no anticipar los problemas correctamente y terminar con otro desorden que desea volver a escribir desde cero. No porque seas malo, sino porque es imposible hacer algo grande de una sola vez.

Cuando, en cambio, comienzas a refactorizar, puedes escribir tickets individuales y puedes continuar usando el proyecto. El truco aquí es identificar cambios más pequeños que conduzcan a un mejor diseño general.

Por ejemplo: usted menciona, no tiene MVC, pero desea hacerlo. Como primer paso, podría tomar un solo archivo PHP y, suponiendo la combinación habitual, ordenarlo, de modo que en la parte superior tenga todos los accesos a la base de datos, cálculos, etc., en la parte inferior tenga las "plantillas" ( Primeras entradas, para cada archivo). Como segundo paso, podría encapsular todas estas partes de las plantillas en funciones, para que se pasen sus parámetros. (Muchas más entradas). ¿Hecho? Felicidades, terminaste tu V en MVC.

    
respondido por el keppla 15.09.2011 - 16:39
3

Considere utilizar un marco existente. CakePHP, Zend Framework, CodeIgniter y Symfony son los conocidos para PHP. Si satisfacen las necesidades de cientos o miles de usuarios, estoy seguro de que pueden satisfacer las suyas.

Si estás dispuesto a aprender / usar algo que no sea PHP, Django (Python) y Rails (Ruby) son prácticamente los marcos principales para aplicaciones web convencionales.

Eso es, por supuesto, a menos que desee experimentar crear marcos - lo cual, podría agregar, es de mucho menos valor en el mercado (en lugar de saber cómo usar bien los marcos existentes y soportados).

    
respondido por el Yam Marcovic 15.09.2011 - 17:35
1

Lo que disfruto usando es Redmine como un rastreador de horarios. IT maneja cada uno de esos elementos muy bien, además de ser mucho más fácil de usar (en mi opinión) que trac.

Con respecto a su reescritura, es importante que primero entienda que nunca anticipará cada característica / nueva extensión que pueda surgir, así que intente escribir su aplicación de la manera más flexible posible. El uso de muchos de los marcos MVC que tiene PHP puede ayudar a aprovechar esto; Sin embargo, algunos de estos marcos también pueden pedirle un agujero si su arquitectura de base de datos no es flexible desde el principio (Cake). Realmente me enfocaré en hacer las cosas lo más abstractas que puedas, y cada vez que veas algo codificado, pregúntate para qué sirve y por qué no puede almacenarse en una base de datos.

El diseño de DB realmente ayuda a responder muchas preguntas y problemas, y es donde veo la importancia principal de cómo interactúa su aplicación; así que recomendaría pasar la mayor parte del tiempo analizando cómo se almacenan los datos y cómo está estructurada su base de datos.

    
respondido por el Petrogad 15.09.2011 - 15:54
1

Como software de seguimiento de problemas, JIRA es excelente, pero es muy costoso. Otra buena herramienta que estoy usando es Eventum. Es gratis.

Pero la parte más importante es tener una buena idea de lo que necesita. Primero debe reunir los requisitos para su aplicación, para tener una idea general de lo que desea y lo más completo posible.

En función de eso, creará requisitos de software, es un enfoque más técnico en el que describirá los módulos que formarán parte de su aplicación, sus funciones y subfunciones, objetos, clases, sus interfaces, casi sobre todo.

Al saber, comprenderá bien la complejidad de la aplicación y las líneas de código necesarias, por lo que puede hacer una estimación y crear un cronograma. Es importante tener un calendario y una fecha límite, de lo contrario, puede que nunca lo termines.

Espero que ayude

    
respondido por el Dan Bizdadea 15.09.2011 - 16:08

Lea otras preguntas en las etiquetas