Accueil

Pourquoi écrire un framework ?

by Jean-Camille Mercier 2. septembre 2012 18:29

Voilà maintenant plusieurs années que j'ai commencé à écrire mon framework personnalisé, c'est un regroupement de sources fiables que je connais par coeur et grâce auxquelles je développe beaucoup plus rapidement. En général ce sont simplement des classes statiques pour pouvoir les utiliser très facilement mais il y a aussi quelques classes de base, des interfaces et 2 ou 3 modules un plus imposants. Outre le fait de ne plus se poser de question sur l'écrire de principes récurrents, ce framework m'apporte une sérénité certaine lorsque je développe car je sais, et c'est rassurant, que mon framework est très peu buggé ! Ce sont des classes que j'ai utilisé 1000 fois de 1000 manières différentes et à chaque bug trouvé il s'est renforcé.

Alors lorsque je trouve un bug dans le code source de blogengine.net, je me dis simplement que j'ai fais le bon choix en me lançant dans ce framework. Voici le bug : 

packages.OrderByDescending(p =>
 Convert.ToDateTime(p.LastUpdated, CultureInfo.InvariantCulture))
         .ThenBy(p => p.Title)
         .ToList();

Comme souvent c'est un bug bète ... la variable "LastUpdated" est une string qui sort surement d'un ToString(). Lorsque j'ai passé l'application en français, la culture courante fait que cette chaine ne peut plus être analysée en culture invariante et l'application plante. Le problème est surement antérieur mais qu'importe, je traite ce bug avec mon framework et tout rentrera dans l'ordre. 

/// <summary>
/// Tente la conversion vers un DateTime
/// Si la conversion n'aboutie pas, renvoi null
/// </summary>
public static DateTime? ToNullableDateTime(object toConvert, IFormatProvider culture = null)
{
  if ((toConvert == DBNull.Value) || (toConvert == null)) return null;
  if (toConvert is DateTime) return new Nullable<DateTime>((DateTime)toConvert);

  if (culture == null) culture = Thread.CurrentThread.CurrentCulture;

  DateTime retval = DateTime.MinValue;
  if (DateTime.TryParse(toConvert.ToString(), culture, DateTimeStyles.None, out retval))
    return new Nullable<DateTime>(retval);
  else if (DateTime.TryParse(toConvert.ToString(), CultureInfo.InvariantCulture, DateTimeStyles.None, out retval))
    return new Nullable<DateTime>(retval);
  else
    return null;
}

Ce n'est pas un code compliqué, ce n'est pas le code de l'année, mais on en va pas coder ça à chaque projet, on en oublierait un petit bout à chaque fois ... Voilà où est la vraie utilité d'un framework, tous ces petits codes qui rendent vos développement rapides et fiables ! Alors peut importe le temps que le framework va mettre à se construire, le principal c'est déjà d'en commencer un Cool