Pregunta

Tengo que hacer algún desarrollo significativo en un sistema ASP grande, viejo y plagado de espaguetis.He estado alejado de ASP durante mucho tiempo, centrando mis energías en el desarrollo de Rails.

Un paso básico que he tomado es refactorizar las páginas en subs y funciones con nombres significativos, de modo que al menos sea fácil entender en la parte superior del archivo lo que sucede en general.

¿Existe un marco MVC que valga la pena para ASP?¿O una mejor práctica sobre cómo al menos eliminar la lógica empresarial de las vistas?(Recuerdo haber hecho muchas inclusiones en el pasado. ¿Sigue siendo esa la forma de hacerlo?)

También me encantaría realizar algunas pruebas unitarias para la lógica empresarial, pero ¿tal vez estoy pidiendo demasiado?

Actualizar:

Hay más de 200 scripts ASP en el proyecto, algunos de miles de líneas de largo;) ¡UGH!

Podemos optar por la "gran reescritura", pero hasta entonces, cuando esté cambiando una página, quiero dedicar un poco más de tiempo a limpiar los espaguetis.

¿Fue útil?

Solución

Suposiciones

La documentación para el sistema ASP clásico es bastante sencilla.

La gerencia no busca una reescritura.

Dado que ha estado haciendo Ruby on Rails, su ASP.NET (VB/C#) es aceptable en el mejor de los casos.

Mi experiencia

Yo también heredé un sistema ASP clásico que fue creado de cualquier manera por tipos ex excel-vba.Había muchas de estas cosas <font size=3>crap</font> (y a veces faltan etiquetas de cierre;¡Argggh!).En el transcurso de dos años y medio, agregué un sistema de seguridad, una biblioteca común, CSS+XHTML y pude obligarlo a validar xhtml1.1 (sin el tipo mime adecuado, desafortunadamente) y construí un sistema de informes ajaxy bastante robusto que se está utilizado diariamente por 80 usuarios.

Usé jEdit, con cTags (como lo menciona interferencia arriba) y muchos otros complementos.

Mi consejoIntente crear un archivo de inclusión maestro desde el cual importar todo el material que se usa comúnmente.Cosas como inicio/cierre de sesión, acceso a bases de datos, servicios web, bibliotecas de JavaScript, etc.

Utilice clases.Son ultraprimitivos (sin herencia) pero, como dijo jamting, pueden ser convenientes.

Sangra los guiones correctamente.

Comentario

Escribir un documento de arquitectura externo.Yo personalmente uso LyX, porque es una locura producir un pdf con un buen formato, pero puedes usar lo que quieras.Si usa una wiki, instale el complemento Graphviz y úselo.Es muy fácil hacer diagramas rápidos que se pueden modificar fácilmente.

Como no tengo idea de cuán sustanciales deben ser las mejoras, sugiero que tener un buen documento de arquitectura de nivel alto a medio será muy útil para planificar las mejoras.

En las pruebas unitarias de lógica de negocios, lo único que encontré que funciona es configurar un detector xml-rpc en asp que importa la biblioteca principal y expone las funciones (aunque no las subrutinas) en cualquiera de las subincluyes de la biblioteca principal, y luego Construya, por separado, un sistema de prueba unitaria en un lenguaje con mejor soporte para las cosas que llaman a las funciones ASP a través de xml-rpc.Yo uso Python, pero creo que Ruby debería funcionar.(¿Tiene sentido?).Lo bueno es que la persona que escribe la parte de prueba unitaria del software no necesita ni siquiera mirar el código ASP, siempre y cuando tenga descripciones decentes de las funciones a llamar, para que pueda ser alguien a su lado.

Hay un proyecto llamado aspunit en sourceforge, pero la última versión fue en 2004 y está marcada como inactiva.Nunca lo usé pero es vbscript puro.Una mirada superficial al código me dice que parece que los autores sabían lo que estaban haciendo.

Finalmente, si necesitas ayuda, tengo cierta disponibilidad para realizar trabajos de teletrabajo por contrato (quizás 8 horas semanales como máximo).Siga el enlace para obtener información de contacto.

¡Buena suerte!HTH.

Otros consejos

Dado que una reescritura completa de un sistema en funcionamiento puede ser muy peligrosa, sólo puedo darte un pequeño consejo:Configure etiquetas exuberantes, ctags, en su proyecto.De esta manera puedes saltar a la definición de una función y sub fácil, lo que creo que ayuda mucho.

Sobre separar la lógica de las "vistas".VBScript admite algún tipo de OO con clases.Tiendo a escribir clases que hacen la lógica que incluyo en la página asp que actúa como una "vista".Luego conecto la vista con la clase como Nombre de usuario:<%= Mi cuenta.Nombre de usuario %>.La clase MyAccount también puede tener métodos como:MyAccount.Login() y así sucesivamente.

Algo primitivo, pero al menos puedes encapsular algo de código y ocultarlo del HTML.

Mi consejo sería continuar con la refactorización, el ASP clásico admite clases, por lo que debería poder mover todo menos el código de visualización a archivos ASP incluidos que solo contienen clases.Consulte este artículo sobre cómo pasar del antiguo ASP a ASP.NET.

Refactorización de ASP

En cuanto a una dirección futura, no apuntaría a los formularios web ASP.NET, sino que optaría por el nuevo marco MVC de Microsoft (un complemento de ASP.NET). Será mucho más sencillo migrar a esto desde el ASP clásico.

yo suelo Unidad ASP para realizar pruebas unitarias de algunos de nuestros ASP clásicos y lo considero útil.Puede que sea antiguo, pero ASP también lo es.Es simple, pero funciona y puedes personalizarlo o ampliarlo si es necesario.

También he encontrado Trabajar eficazmente con código heredado por Michael Feathers es una guía útil para encontrar formas de poner a prueba parte de ese código antiguo.

Incluir archivos puede ayudar siempre que sea sencillo.En un momento intenté crear una inclusión para cada clase y no funcionó muy bien.Me gusta tener un par de inclusiones principales con lógica empresarial común y, para páginas complicadas, a veces una inclusión con lógica para cada una de esas páginas.Supongo que podrías hacer MVC con una configuración similar.

¿Existe alguna posibilidad de pasar de ASP a ASP.Net?¿O está pensando en mantenerlo en ASP clásico, pero simplemente limpiarlo?Si es posible, recomendaría pasar tanto como sea posible a .Net.Parece que de todos modos puede estar reescribiendo/reorganizando una gran cantidad de código, por lo que pasar a .Net puede que no suponga un gran esfuerzo adicional.

Es de suponer que alguien más escribió la mayor parte o la totalidad del sistema que usted mantiene ahora.Busque los malos hábitos habituales (código repetido, variables con un alcance demasiado amplio, declaraciones if anidadas, etc.) y refactorice como lo haría con cualquier otro lenguaje.Esté atento a las cosas recurrentes en el mismo archivo o en archivos diferentes y resúmalas en funciones.

Si el código fue escrito/mantenido por varias personas, puede haber algunos problemas con un estilo de codificación inconsistente.Encuentro que volver a alinear el código hace que sea más fácil ver las cosas que se pueden refactorizar.

"Miles de líneas de largo" me hace sospechar que también puede haber situaciones en las que se muestran cosas poco relacionadas en la misma página.Una vez más, desea abstraerlos en subrutinas separadas.

Con el tiempo querrás escribir objetos para ayudar a encapsular cosas como la conectividad de la base de datos, pero pasará un tiempo antes de que llegues allí.

Esto es muy antiguo, pero no pude resistirme a agregar mi granito de arena.Si debe reescribir y debe continuar usando ASP clásico:

  • ¡Usa JScript!Es mucho más potente, obtienes herencia y hay algunos beneficios secundarios, como usar los mismos métodos para la validación del lado del servidor que usas para el lado del cliente.
  • absolutamente puedes hacer MVC: escribí un marco MVC y no eran tantas líneas de código
  • También puedes generar tus clases de modelo automáticamente con un poco de trabajo.Tengo un código para esto que funcionó bastante bien.
  • asegúrese de realizar consultas parametrizadas y siempre devolver conjuntos de registros desconectados

Las prácticas de gestión de proyectos de desarrollo de software indican que es necesario retirar software como este.

Sé lo difícil que es hacer lo correcto, más aún cuando el gerente responsable sabe una mierda y le asusta todo lo que no sea la peor manera posible.

Pero aún.Es necesario empezar a trabajar en el desarrollo de un nuevo software.Es simplemente imposible mantenerlo para siempre, y cuanto más esperen a retirarlo, peor.

Si no tiene la documentación de especificaciones/requisitos adecuada (creo que ningún software asp en el mundo la tiene, dada la habilidad de esos codificadores), necesitará un grupo de usuarios que conozcan las características del software y un administrador. responsable de validar los requisitos.Deberá revisar cada característica y documentar sus requisitos.

Durante ese proceso irás aprendiendo más sobre el software y su negocio.Una vez que tenga suficiente información, puede comenzar a desarrollar una nueva.

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