¿Consejos para planificar una reescritura de un gran proyecto PHP?

13

He decidido reescribir por completo un marco PHP (usando MVC) en el que he estado trabajando, por intervalos, por años. Mi problema hasta ahora era que solo se me ocurrían ideas, las arrojaba a Trac como tickets y las agregaba más tarde, 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 de dónde comenzar con la planificación, sé que no quiero usar Trac y sé que necesito más que solo entradas e hitos, pero ¿qué más necesitaría?

Realmente quiero planificar a fondo esta reescritura, quiero detallar cada característica que quiero, a dónde irá y cómo se conectará con cada otra parte, 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 realmente.

Sé que necesitaré un documento de diseño, pero ¿hay algún diseño específico 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é, por lo que agradecería cualquier ayuda.

Jon
fuente
¿Por qué quieres reescribirlo? ¿Por qué no refactorizarlo en aquellos lugares que necesitan mejoras? Cuando reescribe algo desde cero, es probable que elimine los viejos problemas por otros nuevos.
@Gordon tal vez está tan terriblemente escrito que reescribirlo es mejor que refactorizarlo.
derecha el
Reescribir siempre es más difícil de lo que parece, y lo aprendí de la manera más difícil. Oh, bueno, esta vez sé lo que estoy haciendo, por lo que tomará la mitad del tiempo (luego termina tomando más tiempo que el original porque estás haciendo un exceso de ingeniería tratando de corregir o evitar errores cometidos anteriormente)
Davy8

Respuestas:

7

Vea a continuación algunas cosas que hago cuando desarrollo un gran proyecto:

1 - Utilizo una herramienta de planificación como OpenProj y agrego todas las características que quiero incluir como tarea. Por ejemplo, en este momento estoy trabajando en una función que permita a mis usuarios iniciar sesión automáticamente después de registrarse en mi sitio. Tengo una tarea en mi plan como "feature-autologin".

2 - Soy una tienda de desarrollo unipersonal, por lo que generalmente paso de una característica a la siguiente. Mi plan se creó de manera que todas las funciones son secuenciales. No invierto demasiado tiempo estimando cuánto tiempo necesitaré para cada función. Por lo general, considero que cada una me llevará un día desarrollarme. Si se necesita más, simplemente actualizo el plan y todas las tareas futuras se mueven en consecuencia.

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

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

5 - Mientras estoy desarrollando, si pienso en una nueva característica, simplemente la incluyo en el plan donde creo que encajará mejor y ajustaré la línea de tiempo nuevamente.

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

jdias
fuente
10

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

NWS
fuente
3
Además, tenga en cuenta que los marcos existentes pueden ser más adecuados que crear otro marco de uso único.
S.Lott
1
@ S.Lott: ¿qué tiene de malo crear un Marco de un solo uso si está diseñado para satisfacer ese uso individual mejor que cualquier otro?
Anónimo
1
@ Chris Bridgett: El mundo puede no necesitar otro marco altamente especializado. Puede ser una "molestia atractiva". Una divertida pérdida de tiempo. A menudo, los marcos existentes hacen el trabajo igual de bien. La "adaptación" en un marco de propósito especial a menudo se deriva de la incapacidad de comprender un marco establecido existente. A menudo, los marcos existentes son más seguros, más confiables y más rápidos. A menudo, los marcos existentes ya se depuran. A menudo, los marcos existentes son mejor entendidos por otros miembros del equipo.
S.Lott
@ S.Lott: estoy escribiendo esto para varios sitios que tengo, y su diseño está configurado de una manera que ningún otro marco lo es. Tampoco planeo lanzarlo por un tiempo, si es que lo hago. re: TheLQ: Ese fue uno de mis primeros pensamientos, sin embargo, ningún otro lenguaje web tiene el alcance que PHP tiene aparte de .NET. Se preferiría Python, sin embargo, configurarlo en servidores cPanel (que lamentablemente componen gran parte del mundo del alojamiento web), es un dolor.
Jon
1
@ S.Lott He estado leyendo sobre Symfony, CakePHP y CodeIgniter desde que publiqué, y la cosa número uno que me impide usarlos es que todos parecen ceñirse ciegamente a MVC e ignoran la reutilización. Mi diseño actual (y futuro, si lo reescribo) es MVC en una sola carpeta (una carpeta de 'módulo'), con vistas allí, sin embargo, el usuario desea (llamado ejemplo.module.view.php), así como temas carpeta, donde los diseñadores pueden crear sus propios temas que anulan las vistas existentes. Esto es crucial para mí, y ninguno de los principales marcos parece hacer esto sin mucha piratería, eso me molesta.
Jon
10

Sugeriría refactorizar mucho

El problema que anticipa aquí:

Realmente quiero planificar a fondo esta reescritura, quiero detallar cada característica que quiero, a dónde irá y cómo se conectará con cada otra parte, 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 realmente.

Es una muy difícil. Es básicamente el modelo Cascada con toda su fealdad. Aquí hay alguna evidencia anecdótica de los problemas con el enfoque de 'gran reescritura', que llega a la conclusión: probablemente no anticipará los problemas correctamente y terminará con otro desastre que desea reescribir desde cero. No porque seas malo, sino porque es imposible hacer algo grande de una sola vez.

Cuando en lugar de empezar a refactor, se puede escribir entradas individuales y se puede seguir utilizando el proyecto. El truco aquí es identificar cambios más pequeños que conduzcan a un mejor diseño general.

Por ejemplo: usted menciona que no tiene MVC, pero desea hacerlo. Como primer paso, puede tomar un solo archivo PHP y, suponiendo la mezcla habitual, ordenarlo, de modo que en la parte superior tenga todo el acceso db, cálculo, etc., en la parte inferior tenga la "plantilla" ( primeros tickets, para cada archivo). Como segundo paso, puede encapsular todas estas partes de plantilla en funciones, que pasan sus parámetros. (muchos más boletos). ¿Hecho? Felicidades, terminaste tu V en MVC.

keppla
fuente
Lo tendré en cuenta, gracias. También solo para aclarar las cosas: estoy usando MVC en este momento.
Jon
@ Jon: Sí, también, mi ejemplo asumió una página típica, sin marco. Pero creo que, mutatis mutandis, mi respuesta no es invalidada por eso. Un punto que no mencioné: refactorizar es divertido. Es muy gratificante ver porquería total de convertirse en algo hermoso :)
keppla
3

Considere usar 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á dispuesto a aprender / usar algo que no sea PHP, Django (Python) y Rails (Ruby) son los principales marcos para aplicaciones web convencionales.

Eso es, por supuesto, a menos que desee experiencia en la creación de marcos, lo que, podría agregar, tiene mucho menos valor en el mercado (en lugar de saber cómo usar bien los marcos existentes y compatibles).

Ñame Marcovic
fuente
1

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

Con respecto a su reescritura, es importante comprender primero que nunca anticipará cada característica / nueva extensión que pueda aparecer, por lo que intente y escriba su aplicación lo más flexible posible. El uso de muchos de los marcos MVC que PHP tiene puede ayudar a aprovechar esto; sin embargo, algunos de estos marcos también te hacen agujeros si tu arquitectura de base de datos no es flexible desde el principio (Cake). Realmente me enfocaría en hacer las cosas tan abstractas como sea posible, y cada vez que vea algo codificado pregúntese para qué sirve y por qué no puede almacenarse en un DB.

Realmente el diseño de base de datos ayuda a responder tantas preguntas y problemas, y es donde veo la importancia principal de cómo interactúa su aplicación; Por lo tanto, recomendaría pasar una buena mayoría de tiempo analizando cómo se almacenan los datos y cómo está estructurada su base de datos.

Petrogad
fuente
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 base a eso, creará requisitos de software, que 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 todo.

Sabemos que comprenderá bien la complejidad de la aplicación y las líneas de código necesarias, de modo que pueda hacer un cálculo y crear un cronograma. Es importante tener un horario y una fecha límite, de lo contrario, puede terminar sin terminarlo.

Espero eso ayude


fuente
Jira es muy económico para menos de 10 usuarios. El costo es de $ 10 y los $ 10 van a caridad.
sixtyfootersdude