[WPF] Créer vos classes d’objets métier en quelques clics de souris !
Ce qui me connaissent bien savent que j’ai toujours une grande quantité de projets en cours et que, faute de temps, ceux-ci n’avancent pas vite. L’un d’eux devrait bientôt voir le jour mais pour le moment, en voici un autre un peu moins…. important (si je puis dire
).
Pour les besoins d’un projet WPF récent, j’ai eu besoin de créer plusieurs classes me servant d’objet métier et cela a été l’occasion pour moi de mettre au point un outil que j’avais depuis longtemps en tête.
Tout le monde est capable de créer une classe et ses quelques propriétés: les snippets de Visual Studio permettent de faire gagner un temps précieux. Seulement avec WPF, il est conseillé de faire implémenter l’interface INotifyPropertyChanged à ces objets, pour que ceux-ci soient en mesure d’informer l’interface utilisateur qu’ils ont été modifié.
Or, dans ce cas, les snippets de Visual Studio 2008 ne sont pas d’une très grande aide car ils génèrent des propriétés automatiques (i.e des propriétés dont le membre privé est généré à la compilation) et sur lesquelles il n’est pas possible de rajouter de code (à moins de le faire à posteriori):
public class Demo
{
public int ID { get; set; }
public string Name { get; set; }
}
Afin de me permettre de gagner un maximum de temps dans la génération de mes objets métier, j’ai créé un petit addin à Visual Studio (que je devrais bientôt mettre sur Codeplex) et qui, grâce à un peu de CodeDom, me permet de générer toutes mes classes, entièrement “compatible” avec WPF, ainsi qu’une collection d’objet métier (collection qui hérite de ObservableCollection):
Le code généré est propre et possède même des commentaires
:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.3053
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WizardBase
{
using System.ComponentModel;
using System.Collections.ObjectModel;
/// Implementation of the class named Product
public class Product : System.ComponentModel.INotifyPropertyChanged
{
#region Property ID
/// <summary>
/// Private field used for the property ID
/// </summary>
private int m_ID;
/// <summary>
/// Description for the property ID
/// </summary>
protected virtual int ID
{
get
{
return m_ID;
}
set
{
m_ID = value;
this.RaisePropertyChanged("ID");
}
}
#endregion
#region Property Name
/// <summary>
/// Private field used for the property Name
/// </summary>
private string m_Name;
/// <summary>
/// Description for the property Name
/// </summary>
protected virtual string Name
{
get
{
return m_Name;
}
set
{
m_Name = value;
this.RaisePropertyChanged("Name");
}
}
#endregion
#region INotifyPropertyChanged Members
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
#endregion
#region Private Methods
/// <summary>
/// Method used to raise the event PropertyChanged
/// </summary>
private void RaisePropertyChanged(string propName)
{
if ((PropertyChanged != null))
{
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propName));
}
}
#endregion
}
/// <summary>
/// Implementation of the collection named ProductCollection
/// </summary>
public class ProductCollection : ObservableCollection<Product>
{
}
}
Il me faut encore finaliser 2-3 petites choses avant de mettre ceci en release mais je compte bien rajouter un maximum de fonctionnalités à cet addin donc si vous avez des idées, n’hésitez pas ! 
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :