tutorial net mvc español asp asp.net-mvc coding-style refactoring

asp.net mvc - net - ¿Mejores prácticas para refactorizar ASP clásico?



asp.net mvc 7 (8)

¿Hay alguna posibilidad de que pueda pasar de ASP a ASP.Net? ¿O está buscando mantenerlo en ASP clásico, pero simplemente limpiarlo? Si es posible, recomendaría moverme tanto como sea posible moviéndome a .Net. Parece que puede estar reescribiendo / reorganizando una gran cantidad de código de todos modos, por lo que mudarse a .Net puede no ser un esfuerzo extra.

Tengo que hacer un desarrollo significativo en un sistema ASP grande, viejo y lleno de espagueti. 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 refaccionar 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 generalmente está sucediendo.

¿Existe un marco MVC que valga la pena para ASP? ¿O una buena práctica sobre cómo, al menos, sacar de los puntos de vista la lógica empresarial? (Recuerdo haber incluido muchas cosas en ese día, ¿todavía es la forma de hacerlo?)

Me encantaría hacer algunas pruebas unitarias para la lógica de negocios también, pero ¿quizás estoy pidiendo demasiado?

Actualizar:

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

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


Presumiblemente, alguien más escribió la mayoría o todo el sistema que ahora está manteniendo. Busque los malos hábitos habituales (código repetido, variables que tienen un alcance demasiado amplio, declaraciones anidadas si, etc.) y refactorícese como lo haría con cualquier otro idioma. Esté atento a las cosas recurrentes en el mismo archivo o en archivos diferentes y resúmalos en funciones.

Si el código fue escrito / mantenido por varias personas, puede haber algunos problemas con el estilo de codificación inconsistente. Creo que al volver a poner el código en línea, es más fácil ver las cosas que se pueden refactorizar.

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

Finalmente, querrá escribir objetos para ayudar a encapsular cosas como la conectividad de la base de datos, pero pasará un tiempo antes de que llegue.


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

Refactorización de ASP

Con respecto a una dirección futura, no apuntaría a los formularios web ASP.NET, sino que buscaría el nuevo framework MVC de Microsoft, un complemento de ASP.NET). Será mucho más simple migrar a este de ASP clásico.


Uso ASPUnit para probar unidades de algunos de nuestros ASP clásicos y lo encuentro útil. Puede ser viejo, pero también lo es ASP. Es simple, pero funciona y puede personalizarlo o ampliarlo si es necesario.

También he encontrado Working Effectively with Legacy Code de Michael Feathers para ser una guía útil para encontrar formas de probar un poco de ese código antiguo.

Incluir archivos puede ayudar mientras lo mantenga simple. En un momento intenté crear una inclusión para cada clase y eso no funcionó demasiado bien. Me gusta tener un par principal que incluye lógica comercial 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.


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

Al separar la lógica de "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 uniré la vista con la clase como Nombre de usuario: <% = MyAccount.UserName%>. La clase MyAccount también puede tener métodos como: MyAccount.Login () y así sucesivamente.

Tipo de primitivo, pero al menos puedes capsular algún código y esconderlo del HTML.


Esto es muy viejo, pero no pude resistirme a agregar mis dos centavos. Si debe volver a escribir, y debe continuar utilizando ASP clásico:

  • usa JScript! mucho más poderoso, obtienes herencia, y hay algunos buenos beneficios secundarios como usar los mismos métodos para la validación del lado del servidor que utilizas para el lado del cliente
  • puedes hacer MVC por completo: escribí un framework MVC, y no fueron tantas las líneas de código
  • también puede generar sus clases 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 devolver siempre conjuntos de registros desconectados

Las prácticas de administración de proyectos de desarrollo de software indican que los softwares como este requieren retirarse.

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

Pero aún. Es necesario comenzar a trabajar en el desarrollo de un nuevo software. Es simplemente imposible mantener este para siempre, y el perro espera que lo retiren para siempre.

Si no cuenta con la documentación de especificaciones / requisitos adecuada (creo que no hay ningún software asp en el mundo, dada la habilidad noocial de esos codificadores), necesitará un grupo de usuarios que conozcan las características del software y un administrador para ser 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.


Suposiciones

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

La administración no está buscando una reescritura.

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

Mi experiencia

Yo también heredé un clásico sistema ASP que fue abofeteado de cualquier forma por los tipos ex excel-vba. Había muchas cosas así <font size=3>crap</font> (y a veces faltaban las etiquetas de cierre; Argggh!). En el transcurso de 2,5 años, agregué un sistema de seguridad, una biblioteca común, CSS + XHTML y pude forzar la cosa para validar xhtml1.1 (sin el tipo de mime apropiado, desafortunadamente) y construí un sistema de informes ayaxy bastante sólido que se está utilizado diariamente por 80 usuarios.

Usé jEdit, con cTag (como se menciona al interferir arriba) y un montón de otros complementos.

Mi consejo Intente crear un archivo de inclusión maestro desde el cual importar todo lo que se usa comúnmente. Cosas como inicio de sesión / cierre de sesión, acceso a la base de datos, servicios web, librerías de JavaScript, etc.

Utiliza clases Son ultra-primitivos (sin herencia), pero como dijo jamting, pueden ser convenientes.

Sancionar las secuencias de comandos correctamente.

Comentario

Escribir un documento de arquitectura externa. Yo personalmente uso LyX, porque tiene un cerebro muerto para producir un pdf muy bien formateado, pero puede usar lo que quiera. Si usa una wiki, obtenga el complemento graphviz instalado y úselo. Es muy fácil hacer diagramas rápidos que puedan modificarse fácilmente.

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

En las pruebas de unidad de lógica de negocios, lo único que encontré que funciona es configurar un oyente xml-rpc en asp que importa la biblioteca principal y expone las funciones (no las subrutinas) en cualquiera de las subincidencias de la biblioteca principal, y luego construya, por separado, un sistema de prueba unitario en un idioma con mejor soporte para las cosas que llama a las funciones ASP a través de xml-rpc. Yo uso Python, pero creo que Ruby debería hacer el truco. (¿Tiene sentido?). Lo bueno es que la persona que escribe la parte de prueba del programa no necesita ni siquiera mirar el código ASP, siempre y cuando tenga descripciones decentes de las funciones a las que llamar, para que puedan ser alguien a su lado.

Hay un proyecto llamado aspunit en sourceforge pero el último lanzamiento fue en 2004 y está marcado como inactivo. 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 necesita ayuda, tengo algo de disponibilidad para realizar trabajos de teletrabajo por contrato (tal vez 8 horas / semana como máximo). Siga el recorrido del enlace para obtener información de contacto.

¡Buena suerte! HTH.