Pregunta

Tengo una aplicación web grande que se ejecuta en perl CGI. Está funcionando bien, está bien escrito, pero como se hizo en el pasado, todos los html están definidos en las llamadas CGI, por lo que, como pueden imaginar, es difícil de mantener, mejorar, etc. Así que ahora me gustaría comenzar para agregar algunas plantillas e integrar con un marco (catalizador o CGI :: aplicación). Mi pregunta es: ¿Alguien aquí tiene una experiencia así? ¿Hay algo por lo que deba prestar atención? Soy consciente de que con ambos marcos puedo ejecutar secuencias de comandos CGI nativas, por lo que es bueno porque puedo ejecutar ambas (código marco y anuncio nativo CGI) juntas sin ningún trauma. ¿Algún consejo?

¿Fue útil?

Solución

Escriba las pruebas primero (por ejemplo, con Test :: WWW: : Mecanizar ). Luego, cuando cambias las cosas, siempre sabes si algo se rompe, y qué es lo que se rompe.

Luego extraiga HTML en plantillas, y los subs usados ??comúnmente en módulos. Después de eso, es fácil cambiar a un marco.

En general, vaya paso a paso para que siempre tenga una aplicación que funcione.

Otros consejos

Extraiga el HTML de la lógica de procesamiento en el script CGI. Identifique todo el código que afecta a la salida HTML, ya que estos son candidatos para convertirse en variables de plantilla. Separe eso en un archivo HTML, con las partes identificadas marcadas con variables de plantilla. Eventualmente, podrá refactorizar la página de tal manera que todo el procesamiento se realice al comienzo del código y la plantilla HTML que se acaba de llamar al final de todo el procesamiento.

En este tipo de situación, al volver a escribir desde cero, el código antiguo es útil para A) pruebas y B) detalles de diseño. Lo ideal sería realizar un conjunto de pruebas, para todas las funciones básicas que desea replicar, o al menos las pruebas que analizan las páginas de resultados finales para que pueda ver que el nuevo código está devolviendo la misma información para las mismas entradas.

Los detalles de diseño dentro del código pueden ser inútiles, dependiendo de cuánto maneje el marco automáticamente. Si tiene un buen conjunto de pruebas y una conversión sencilla funciona bien, ya está. Si el comportamiento del nuevo no coincide con el anterior, probablemente deba profundizar más en el " ¿por qué? & Quot; y eso probablemente sea algo extraño, eso no tiene sentido a primera vista.

Una cosa que debe recordar hacer primero es averiguar si alguien ha hecho algo similar en el marco que está utilizando. Podrías ahorrarte MUCHO tiempo y dinero.

Aquí es cómo lo hice usando Python en lugar de Perl, pero eso no debería importar:

  1. Separó HTML y código en archivos distintos. Utilicé un motor de plantillas para eso.
  2. Creó funciones a partir del código que representaba una plantilla con un conjunto de parámetros.
  3. Organizó las funciones (que denominé vistas , inspiradas por Django) de una manera sensata. (Vistas de administrador, vistas de usuario, etc.) ¡Las vistas siguen todas la misma convención de llamadas !
  4. Se reestructuró la base de datos y se solicitó material para que las vistas solo contuvieran código de vista específico (léase: Manejo de solicitudes GET, POST, etc. pero nada de bajo nivel !). Confió en gran medida en las bibliotecas existentes para eso.

Estoy aquí en este momento. :-) El siguiente paso obvio es, por supuesto:

  • Escriba un distribuidor que asigne URLs a sus vistas . Esto también conducirá a direcciones URL más agradables y un mejor manejo de errores, por supuesto.

Una de las suposiciones que hacen los frameworks es que las URL se asignan al código. Por ejemplo, en un marco, a menudo verá lo siguiente:

http://app.com/docs/list
http://app.com/docs/view/123

Por lo general, aunque los antiguos scripts CGI no funcionan así, es más probable que tengas algo como:

http://app.com/docs.cgi?action=view&id=123

Para aprovechar el marco, es posible que debas cambiar todas las direcciones URL. Si puede hacer esto y cómo mantiene funcionando los enlaces antiguos, bien puede ser una gran parte de su decisión.

También los marcos proporcionan soporte para algún tipo de ORM (mapeador relacional de objetos) que abstrae las llamadas de la base de datos y le permite tratar solo con objetos. Para Catalyst suele ser DBIx :: Class . Debe evaluar cuál será el costo de cambiar a esto.

Probablemente encontrará que desea hacer una reescritura completa, con el código anterior como plataforma de referencia. Esto puede ser mucho menos trabajo de lo que espera. Sin embargo, comience con algunos sitios de juguetes para tener una idea del marco / plantilla / plantilla con el que decida ir.

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