Les génériques, premier pas vers le concept DRY

Pour ceux qui ne sont pas familiers avec le terme DRY, voici ce que l’on peut trouver comme définition sur wikipedia :

Ne vous répétez pas (Don’t Repeat Yourself) est une philosophie en programmation informatique consistant à éviter la redondance de code au travers de l’ensemble d’une application afin de faciliter la maintenance, le test, le débuggage et les évolutions de cette dernière.

Et oui c’est un acronyme de plus …

Bref, en quoi les génériques ont un rapport avec DRY ? Réponse tout !

Mais je vais parler d’un cas en particulier ici.

Disons que l’on a un Repository (une classe) qui doit contenir une méthode qui renvoi un object d’un certain type ayant l’id spécifié.

On pourrait écrire la méthode suivante :

public IDomainObject GetById(Type wantedType, object id)
{
    IDomainObject myObject = null;
    // do something
	return myObject;
}

Ce code est bien, mais pas top ! l’utilisateur fera un typeof() ou un GetType à chaque appel

La même méthode générique :

public T GetById(object id) where T : class, IDomainObject
{
	T myObject = default(T);
	// do something
	return myObject;
}

Youpi ! un seul paramètre et en plus plus de typeof et de cast de partout !