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.
Respuestas:
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!
fuente
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.
fuente
Sugeriría refactorizar mucho
El problema que anticipa aquí:
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.
fuente
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).
fuente
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.
fuente
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