Fody.PropertyChanged, nos ayuda a implementar INotifyPropertyChanged

  • Dachi Gogotchuri Dachi Gogotchuri
  • hace 6 años
Fody.PropertyChanged, nos ayuda a implementar INotifyPropertyChanged

Fody.PropertyChanged

Hola Geeks!

Hoy os traigo un tool que me he encontrado por Internet que me ha gustado. Se trata de ahorrarnos para implementar nuestro IPropertyChanged. Si os acordáis teníamos que declarar la interfaz en una clase e implementarlo teniendo como mínimo un método para invocar el PropertyChanged. Luego en cada clase que quisiéramos utilizarlo tener que implementar esta clase llamando el método para cada Property que tenemos declarado.

Pues se acabaron los sufrimientos!! Fody.PropertyChanged inyecta en tiempo real la estructura IPropertyChanged en tu clase. Vamos a ver como se haría esto:

Lo tenemos disponible directamente desde NuGet:

PM> Install-Package PropertyChanged.Fody

 Ahora nuestro código para utilizarlo sería así:

[ImplementPropertyChanged]
public class Person 
{        
    public string GivenNames { get; set; }
    public string FamilyName { get; set; }

    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", GivenNames, FamilyName);
        }
    }
}

 Lo que tenemos aquí es simplemente una clase Person que tiene 3 Properties, siendo el tercero que devuelve los otros dos Properties concatenadas. Pero al final ponemos encima de la clase Person ImplementPropertyChanged.

Por ultimo aquí os muestro lo que será compilado:

public class Person : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    string givenNames;
    public string GivenNames
    {
        get { return givenNames; }
        set
        {
            if (value != givenNames)
            {
                givenNames = value;
                OnPropertyChanged("GivenNames");
                OnPropertyChanged("FullName");
            }
        }
    }

    string familyName;
    public string FamilyName
    {
        get { return familyName; }
        set 
        {
            if (value != familyName)
            {
                familyName = value;
                OnPropertyChanged("FamilyName");
                OnPropertyChanged("FullName");
            }
        }
    }

    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", GivenNames, FamilyName);
        }
    }

    public virtual void OnPropertyChanged(string propertyName)
    {
        var propertyChanged = PropertyChanged;
        if (propertyChanged != null)
        {
            propertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

 Vemos que toda la estructura lo ha implementado todo el sólito. Puede ayudar mucho agilizar la construcción de clases.

Conclusión, no es oro todo lo que reluce.

Por ultimo también quiero deciros los contras que tiene si alguien decide a partir de hoy a implementar INotifyPropertyChanged de esta manera. Al construirse la estructura en tiempo real es bastante difícil poder realizar test sobre ella y depurarlo. Puede ser poco práctico teniendo que instalar en cada proyecto, si lo actualizan te toca actualizar y reiniciar VisualStudio. Y sobre todo para mi lo que es mas importante, la construcción en tiempo real, lo hace mas lenta y gasta mas recursos al cargar mucho el momento del "build" del proyecto.

Pero sin duda es para tenerlo en cuenta, si a alguien le ha ido bien utilizando esta tool, que deje un comentario o haga un articulo :D, bienvenida será. Fody.PropertyChanged esta utilizado por CEE y les va bien, lo tienen implementado en un App de Windows Phone, lector de Pocket (Poki), siendo la más famosa.

Si os gusta no escatimar en hacerlo saber a todos vuestros friends!

enlace a Fody.PropertyChanged

¿Qué opinas?