que tienen un montón de clase de negocios con autoproperties:Refactor C# propiedades automáticas para campos y propiedad getter/setter?
public class A {
public int Id { get; set; }
public string Title { get; set;}
}
Debido a que la aplicación evoluciona, hay un nuevo requisito para permitir el seguimiento de los cambios de las propiedades, con el fin de enviar al almacén de respaldo sólo cambió de datos.
Para alcanzar este objetivo, tengo que convertir todas las propiedades de campo + propiedad como esta:
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
}
}
¿Hay una manera de refactorizar mi código rápidamente para evitar tener que cambiar manualmente las propiedades?
Si todas sus clases de negocio son simplemente clases con autopropiedades y nada más, me gustaría convertir el uso de [plantillas T4] (http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx) para generar sus clases.Entonces es un cambio trivial cambiar el formato de todos ellos como arriba. – mellamokb
Reemplazo de regex puede funcionar - también Resharper tiene algo como esto pero probablemente requiera que haga cada uno por turno. Además, una plantilla de CodeSmith resolvería eso en poco tiempo, suponiendo que sabes cómo usarlo. De lo contrario, crearía un fragmento de código que tiene la estructura correcta y simplemente volvería a hacer las propiedades. ¡El fragmento de código completará todos los bits, supongo, pero sigue siendo un trabajo manual! Me gustaría ir a la expresión regular ... o como dice mellamokb, una plantilla T4, he tenido mucho éxito con ellos para cosas simples – Charleh
¿Usas Resharper? Si es así, se trata de un acceso directo, y alguien lo ha ampliado para agregar automáticamente el soporte INotifyPropertyChanged: https://bitbucket.org/tgmayfield/resharper.tgmcontrib –