Ho un sacco di business class con autoproperties:Refactor C# proprietà automatiche per campi e proprietà getter/setter?
public class A {
public int Id { get; set; }
public string Title { get; set;}
}
Poiché l'applicazione si evolve, c'è un nuovo requisito per consentire il monitoraggio dei cambiamenti delle proprietà, al fine di inviare al negozio di supporto modificato solo dati.
Al fine di raggiungere questo obiettivo, devo convertire tutte le proprietà di campo + proprietà come questa:
public class A {
private int m_Id;
public int Id {
get { return m_Id; }
set {
if(m_Id != value){
SetChanged("Id");
m_Id = value;
}
}
}
private string m_Title;
public string Title
{
get { return m_Title; }
set {
if(m_Title != value){
SetChanged("Title");
m_Title = value;
}
}
}
protecte void SetChanged(string propertyName) {
// Not important here
}
}
Esiste un modo di refactoring rapidamente il mio codice per evitare di dover modificare manualmente le proprietà?
Se tutte le classi aziendali sono semplicemente classi con autoproprietà e nient'altro, vorrei convertire a utilizzare [modelli T4] (http://www.hanselman.com/blog/T4TextTemplateTransformToolkitCodeGenerationBestKeptVisualStudioSecret.aspx) per generare le classi.Quindi è un cambiamento banale riformattare tutti come sopra. – mellamokb
La sostituzione di Regex può funzionare - anche Resharper ha qualcosa del genere ma probabilmente richiede che tu ne faccia uno a turno. Anche un modello CodeSmith risolverebbe in un batter d'occhio, assumendo che tu sappia come usarlo. Altrimenti creerei uno snippet di codice che ha la struttura giusta e rifare le proprietà. Lo snippet di codice riempirà tutti i bit che suppongo, ma è ancora un lavoro manuale! Andrei per il regex ... o come dice mellamokb, un modello T4, ho avuto un buon successo con loro per cose semplici – Charleh
Usi Resharper? In tal caso, si tratta di una scorciatoia e qualcuno lo ha esteso per aggiungere automaticamente il supporto di INotifyPropertyChanged: https://bitbucket.org/tgmayfield/resharper.tgmcontrib –