Sto tentando di ridefinire un'applicazione Winform esistente per utilizzare il pattern MVP Passive View. L'interfaccia utente dell'applicazione, la logica aziendale e il codice di archiviazione dei dati sono stati liberamente mescolati per anni. Sembra che sia iniziato con livelli separati o qualcuno abbia tentato di separarlo in livelli. In ogni caso i confini del livello non sono stati rispettati.Refactoring WinForm ClickNCode a MVP Vista passiva
Poiché i moduli manipolano direttamente gli oggetti dominio e l'origine dati (e viceversa), il mio primo compito è creare oggetti relatore/controllore e delegare tali responsabilità.
L'applicazione è un'app .NET 1.1 e sto sviluppando in VS.NET 2003 con un componente aggiuntivo di refactoring piuttosto limitato. Ho usato un generatore di test per il codice esistente per creare i test dell'unità della piastra della caldaia, quindi ho esaminato e modificato manualmente ciascun test. Certo, questo finisce per testare cosa fa il codice, non necessariamente ciò che si suppone di fare. Per le nuove classi sto facendo TDD.
Eventuali suggerimenti, risorse, insidie da considerare con uno sforzo di refactoring di questa scala?
Un paio di risorse già ho a mia disposizione:
- Raccolta di libri di programmazione; Refactoring, PEAA, welc
- Internet (ovviamente)
- Grandi quantità di bevande contenenti caffeina
Update: Come esempio quali misure vorresti prendere a trasformare questo:
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();
}
In questo:
private void OneOfManyFormEventHandlers(object sender, System.EventArgs e)
{
this.FormPresenter.DoSomething();
}
Mi consiglia "Lavorare in modo efficace con il codice legacy"? Non ne avevo mai sentito parlare prima. Buona fortuna a proposito, temo di non avere alcun consiglio utile da offrirti –
Sì, è un libro eccellente. Fornisce alcune tecniche molto utili per il codice in prova che non è stato originariamente progettato per questo. Per me il più utile è stato * Extract Interface * –