asp.net - Refacturación de una aplicación heredada de WebForms para separar mejor las preocupaciones
separation-of-concerns mvp (2)
es decir, ¿sigue siendo MVP la siguiente mejor opción cuando MVC no es una opción?
Pensé que podría preguntar esto aquí, ya que estoy seguro de que hay otros como yo que no tienen el lujo de estar en un proyecto de campo verde y quieren refactorizar una interfaz de usuario de formularios web para una mejor separación de la presentación de los objetos comerciales. .
Estoy trabajando en una aplicación heredada encargada de agregar requisitos adicionales, mejoras y correcciones de errores relativamente pequeños.
La parte de la aplicación que estoy tratando aquí se puede caracterizar como la interfaz de usuario para un conjunto de operaciones CRUD sobre objetos comerciales que se conservan en una base de datos relacional.
La interfaz de usuario existente usa un control MultiView para navegar entre la edición de los objetos comerciales asociados (asociaciones one-one o one-many / parent-child). Sí, así es, todo en una página. Desafortunadamente, hay un uso muy moderado de UserControls, por lo que el marcado y el código subyacente tienen cientos de líneas de longitud.
En cada Vista, un FormView administra el CRUD sobre los objetos comerciales a través de varios ObjectDataSources. Dentro de ItemTemplate de cada FormView, varios servidores controlan los datos de los campos o métodos en ObjectDataSource.
Me gustaría introducir una mayor separación de preocupaciones y obtener algunas de las resmas de código fuera de la página de código subyacente.
Mi investigación hasta ahora me sugiere que podría considerar:
Use un sabor de Model View Presenter ; más específicamente, use ObjectContainerDataSource de Web Client Software Factory para facilitar el puente entre la interfaz de usuario actual y un conjunto de nuevas clases de Presenter.
Compila de nuevo desde cero con un framework MVC (no es una opción).
Dejar las cosas como están; un patrón de MVP solo se justifica si necesito volver a usar mi Presentación en diferentes escenarios de IU?
Si me instalo con (3), me gustaría saber cómo comenzar a refactorizar para una mejor separación de la presentación.
¿Qué harías? cualquier otra idea recibida con gratitud ...
Aquí hay más antecedentes para cualquiera que esté interesado:
El dominio está en la investigación farmacéutica, pero eso es bastante irrelevante y se puede considerar como una línea de negocio bastante típica: la configuración del usuario de una familia de configuraciones que forman las condiciones de funcionamiento de otra parte de la aplicación.
La capa de objeto de negocio ya se ha construido de una manera muy consistente. Aunque puede que no me guste, no puedo justificar necesariamente el cambio. Cada objeto es su propio Repositorio / Objeto de acceso a datos, ya que hay métodos estáticos para ''obtener ID'' y ''obtener lista por criterio''. Donde sea posible, las operaciones comunes se implementan en una clase base abstracta. Cada objeto comercial delega el trabajo de acceso a datos a una Capa de acceso a datos que hace uso de los mecanismos ADO.NET 2.0 Provider Factory para permanecer relativamente abstraídos de un Proveedor concreto. A este respecto, comparte mucho en común con cualquier aplicación que use el Bloque de aplicaciones de acceso a datos de Microsoft Enterprise Library.
Hay pruebas de integración bastante exhaustivas escritas en NUnit que configuran una base de datos de prueba desde cero, por lo que tardan años en ejecutarse, pero al menos verifican que todo funcione como debería (en algún momento del pasado ;-). Casi no hay pruebas de unidades verdaderas en su lugar (todavía).
WebForms ahora tiene un esfuerzo emergente en la forma del proyecto ASP.NET Web Forms MVP
"... todavía hay una gran cantidad de ventajas atractivas para los formularios web de ASP.NET.
El proyecto ASP.NET Web Forms MVP es ... un enfoque que facilita la separación de inquietudes y la capacidad de prueba, al tiempo que mantiene el rápido desarrollo que Web Forms fue creado para ofrecer ".
A Rob Conery le preocupa que esto pueda ser un esfuerzo desperdiciado y una distracción innecesaria ahora que tenemos MVC, pero en esta etapa todavía creo que vale la pena ver el código fuente ...
http://haacked.com/archive/2006/08/09/ASP.NETSupervisingControllerModelViewPresenterFromSchematicToUnitTestsToCode.aspx tiene un buen ejemplo de cómo hacer MVP con formularios web. La ventaja no es solo que su UI está desacoplada de BL, el verdadero placer es que puede escribir pruebas para el código.