java - gavilanch2 - tutorial asp net mvc
¿Cuál es la mejor manera de migrar una aplicación web desordenada existente a MVC elegante? (8)
En mi experiencia, la "elegancia" de una aplicación generalmente tiene más que ver con el diseño de la base de datos que cualquier otra cosa. Si tiene un excelente diseño de base de datos, incluida una interfaz de procedimiento almacenado bien definida, un buen código de aplicación tiende a seguir, independientemente de la plataforma que utilice. Si tiene un diseño de base de datos deficiente , no importa qué plataforma use, le resultará muy difícil crear un código de aplicación elegante, ya que estará compensando constantemente la base de datos.
Por supuesto, hay mucho espacio entre grandes y pobres , pero mi punto es que si quieres un buen código de aplicación, comienza asegurándote de que tu base de datos esté a la altura.
Me uní a una nueva compañía hace aproximadamente un mes. La compañía es bastante pequeña y tiene una sensación de "arranque" bastante fuerte. Estoy trabajando como desarrollador de Java en un equipo de 3 personas más. La compañía vende principalmente un servicio para que las personas de negocios o negocios lo usen para comunicarse entre ellos.
Una de las cosas principales en las que he trabajado y estaré trabajando es en el sitio web principal de la empresa, desde donde se vende el servicio, los usuarios existentes inician sesión para verificar su servicio y pagar sus facturas, los nuevos usuarios pueden registrarse para una prueba. , etc. Actualmente se trata de una aplicación JSP implementada en Tomcat, con acceso a una base de datos a través de una capa de persistencia escrita por la propia empresa.
Una frustración repetida y cada vez mayor que estoy teniendo aquí (y estoy bastante contento con el trabajo en general, así que este no es un post tipo "oh no, no me gusta mi trabajo") es la falta de un diseño más grande o arquitectura para esta aplicación web. La aplicación se compone de varias docenas de páginas JSP, con casi ninguna lógica existente en Servlets o Beans o cualquier otro tipo de marco. Muchas de las páginas JSP son miles de líneas de código, jsp:include
otras páginas JSP, la lógica empresarial está mezclada con HTML, los fragmentos de código utilizados con frecuencia (como la obtención de una conexión de servicio web) se cortan y pegan en lugar de reutilizarse , etc. En otras palabras, la aplicación es un desastre.
Hubo algunos rumores dentro de la compañía de tratar de rediseñar este sitio para que se ajuste mejor a MVC; Creo que los desarrolladores y los superiores están empezando a darse cuenta de que este patrón actual de código de spaghetti no es sostenible o muy fácilmente escalable para agregar más características para los usuarios. Los superiores y los desarrolladores son reacios a reescribir por completo el tema (con buenas razones, ya que esto implicaría varias semanas o meses de trabajo para volver a escribir la funcionalidad existente), pero hemos tenido algunas discusiones sobre (lentamente) escribir ciertas áreas del sitio en un nuevo marco.
¿Cuáles son algunas de las mejores estrategias para permitir mover la aplicación y la base de código en esta dirección? ¿Cómo puedo realmente, como desarrollador, ayudar a avanzar en esto, y rápidamente, sin parecer el tipo nuevo que entra en un trabajo y les dice a todos que lo que han escrito es basura? ¿Hay alguna estrategia o experiencia probada que hayas utilizado en tu propia experiencia laboral cuando te encuentras con este tipo de cosas?
Esto es más difícil de hacer en aplicaciones que solo están en modo de mantenimiento porque es difícil convencer a la gerencia de que es útil reescribir algo que ya está ''funcionando''. Comenzaría por aplicar los principios de MVC a cualquier código nuevo en el que pueda trabajar (es decir, mover la lógica comercial a algo parecido a un modelo, poner todo su código de diseño / vista en un solo lugar)
A medida que adquiere experiencia con el nuevo código en MVC, puede comenzar a ver oportunidades para cambiar el código existente sutilmente para que también quede alineado. Puede ser un proceso muy lento, pero si puede mostrar los beneficios de esta forma de hacerlo, podrá convencer a los demás y hacer que todo el equipo participe.
Estoy de acuerdo con el enfoque de refactorización lenta; por ejemplo, tome ese código de copiar y pegar y extráigalo en el paradigma de Java apropiado (¿una clase, quizás? o mejor aún, use una biblioteca existente?). Cuando su código es realmente limpio y escueto, pero aún le falta una estrategia arquitectónica general, podrá hacer que las cosas se ajusten a una arquitectura general mucho más fácilmente.
La mejor manera es imprimir el código, arrugarlo y tirarlo. Ni siquiera recicles el papel.
Tienes una aplicación escrita en más de 1,000 JSP de línea. Es probable que tenga un modelo de dominio horrible (si es que tiene alguno) y no solo presenta MIX con lógica empresarial, lo MEZCLA y se sienta allí y sigue moviéndose durante horas. No hay forma de sacar el código que es malo y pasar a una clase MVC Controller y seguir haciendo lo correcto, terminarás con una aplicación MVC con un modelo anémico de dominio o una que tenga cosas como llamadas a bases de datos. en el código del Controlador, todavía estás fallando.
Podría probar una nueva aplicación que haga lo correcto y luego hacer que las dos aplicaciones hablen entre sí, pero esa es una nueva complejidad en sí misma. También es probable que vayas a hacer la misma cantidad de trabajo que ibas a hacer si comenzaste desde el principio, pero tal vez te resulte más fácil tratar de convencer a tus jefes de que este es un mejor enfoque.
Primero, tome una copia del trabajo de Michael Feather Effective with Legacy Code . Luego identifique la mejor manera de probar el código existente. El peor caso es que estás atascado solo con algunas pruebas de regresión de alto nivel (o nada) y si tienes suerte habrá pruebas unitarias. Entonces, es un caso de refactorización lenta y constante, con suerte, mientras se agrega nueva funcionalidad comercial al mismo tiempo.
Refactor iterativo. También busque nuevas características que se puedan hacer completamente en el nuevo marco como una forma de mostrar el valor del nuevo marco.
Mi sugerencia sería encontrar las páginas raras que no requieren una importación de otros JSP, o tienen muy pocas importaciones. Trate a cada JSP importada como una caja negra, y reordene estas páginas a su alrededor (iterativamente, probando cada cambio y asegurándose de que funcione antes de continuar). Una vez que se hayan limpiado, puede continuar encontrando páginas con más y más importaciones, hasta que finalmente haya refactorizado las importaciones.
Cuando refactorice, tenga en cuenta las partes que intentan acceder a los recursos que no se proporcionan a la página y trate de llevar esto a un controlador. Por ejemplo, cualquier cosa que acceda a la base de datos debe estar dentro de un controlador, deje que el JSP maneje la visualización de la información que el controlador le proporciona a través de un reenvío. De esta forma, desarrollará varios servlets, o cosas como servlets, para cada página. Sugeriría utilizar un marco basado en controlador frontal para esta refactorización (de la experiencia personal recomiendo Spring y su interfaz de controlador), de modo que cada controlador no sea un servlet separado, sino que se delegue desde un único servlet que se asigna correctamente.
Para el controlador, es mejor hacer aciertos de base de datos a la vez en lugar de intentarlos por partes. Los usuarios pueden y generalmente toleran una carga de página, pero la salida de la página será mucho más rápida si todos los datos de la base de datos se entregan al código de representación en lugar del código de representación colgando y no entregando datos al cliente mientras intenta leer otro pieza de datos de la base de datos.
Siento tu dolor y te deseo suerte en este empeño. Ahora, cuando tienes que mantener una aplicación que abusa Spring Webflow, esa es otra historia :)
Tu mejor opción es probablemente refactorizarlo lentamente a medida que avanzas. Pocos de nosotros tenemos los recursos que se necesitarían para comenzar completamente desde cero con algo que tiene tantas reglas comerciales enterradas en él. La administración realmente lo odia cuando pasas meses desarrollando una aplicación que tiene más errores que la que reemplazaste.
Si tiene la oportunidad de crear aplicaciones separadas desde cero, use todas las mejores prácticas allí y úselas para demostrar su eficacia. Cuando pueda, incorpore esas ideas gradualmente en la aplicación anterior.