Estoy intentando refactorizar una aplicación Winform existente para usar el patrón de MVP Passive View. La interfaz de usuario, la lógica comercial y el código de almacenamiento de datos de la aplicación se han entremezclado libremente durante años. Parece que comenzó con capas separadas o alguien intentó separarlo en capas. En cualquier caso, los límites de la capa no fueron respetados.Refactorización de WinForm ClickNCode a MVP Passive View
Dado que los formularios manipulan directamente los objetos de dominio y la fuente de datos (y viceversa), mi primera tarea es crear objetos de presentador/controlador y delegar esas responsabilidades.
La aplicación es una aplicación .NET 1.1 y estoy desarrollando en VS.NET 2003 con un complemento de refactorización bastante limitado. Utilicé un generador de prueba para el código existente para crear las pruebas de la unidad de la placa de la caldera y luego revisé y edité a mano cada prueba. Por supuesto, esto termina probando lo que hace el código, no necesariamente lo que se supone que debe hacer. Para las nuevas clases, estoy haciendo TDD.
¿Algún consejo, recurso, trampas a tener en cuenta con un esfuerzo de refactorización de esta escala?
Un par de recursos que ya tengo a mi disposición:
- colección de libros de programación; Refactoring, PEAA, WELC
- El Internet (obviamente)
- grandes cantidades de bebidas con cafeína
Actualización: A modo de ejemplo ¿qué medidas tomaría usted para convertir esta:
private void OneOfManyFormEventHandlers(object sender, System.EventArgs e)
{
string LocalVariable;
decimal AnotherLocal;
if (!this._SomeDomainObject.SomeMethod(ClassField, out LocalVariable, out AnotherLocal))
{
MessageBox.Show("An error occurred calling method");
return;
}
this.FormControl.Value = LocalVariable;
this.AnotherFormContorl.Value = AnotherLocal;
this.AnotherPrivateMethod();
}
En esto:
private void OneOfManyFormEventHandlers(object sender, System.EventArgs e)
{
this.FormPresenter.DoSomething();
}
¿Usted recomienda "trabajar eficazmente con el código heredado"? Nunca había oído hablar de eso antes. Buena suerte, por cierto, me temo que no tengo ningún consejo útil para ofrecerle –
Sí, es un libro excelente. Le da algunas técnicas muy útiles para el código bajo prueba que no fue diseñado originalmente para él. Para mí, la más útil fue * Interfaz de extracción * –