Développeurs .NET, êtes vous Lazy?

Je crois qu’il n’y a pas une journée où je ne m’attends pas à être surpris par une technologie que j’utilise. Est-ce que cela vous arrive souvent de ne rien apprendre du tout dans l’équivalent d’une journée? Moi, non. Même que c’est quelque chose qui arrive toujours lorsque je ne m’y attends pas!

Si vous êtes un développeur expérimenté, je suis pratiquement certain que vous avez déjà écrit ce genre de code lorsque vous avez à exposer certaines propriétés d’une classe.


private static object _dataSet;
public static object DataSet
{
get
{
if (_dataSet == null)
{
var localObject = new object();
_dataSet = localObject;
}
return _dataSet;
}
}

Il s’agit d’une technique appelée du Lazy Initialization ou un property backing field. C’est comme vous voulez, ça revient un peu au même.

La raison d’être de ce code est simple. Vous désirez éviter d’avoir à exécuter le code d’une propriété à chaque fois que vous l’invoquez. Alors, ce que vous devez faire c’est comme dans l’exemple ci-haut. Utiliser un objet qui contiendra la valeur de cette propriété le temps de la vie de l’objet.

Cette technique n’est pas parfaite, car vous devez maintenant penser à une stratégie pour l’invalidation de cette mise en mémoire. Alors, il s’agit d’une technique qui doit vraiment être uniquement appliquée sur des données ayant une petite durée de vie.

Ditez bonjour à Lazy<T>

Depuis .NET 4, Microsoft a ajouté une classe permettant de faire du Lazy Initialization à même le framework. Cela se fait en utilisant la classe Lazy<T>.


private static readonly Lazy<object> _duplicateDataSet = new Lazy<object>(() =>
{
var localObject = new object();
return localObject;
});
public static object DuplicateDataSet
{
get { return _duplicateDataSet.Value; }
}

view raw

dataset-lazy.cs

hosted with ❤ by GitHub

Ce que vous voyez ici est le même code que celui précédemment démontré en utilisant Lazy<T>. C’est beaucoup plus évident de déterminer l’intention du code dans cet exemple-ci. De plus, comme je dis souvent, moins de code, moins d’erreurs possibles.

En supplément, Lazy<T> est tread safe par défaut. C’est un argument de plus qui fait pencher la balance un peu plus en sa faveur. N’est-ce pas?

Ressources supplémentaires

Publicité

Auteur : Pascal Paradis

Je suis les mains et le cerveau derrière http://frenchcoding.com. Je développe des microservices chez @UbisoftMTL. Amateur de Hockey et j'aime la technologie, en général.

Une réflexion sur “Développeurs .NET, êtes vous Lazy?”

Laisser un commentaire

Entrer les renseignements ci-dessous ou cliquer sur une icône pour ouvrir une session :

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

%d blogueueurs aiment cette page :