L’un des gros dilemmes de blogueur traitant de technologie et de développement logiciel francophone que je fais face est la traduction des termes spécifiques au domaine. Ces termes sont habituellement en anglais et, à mon avis, sont difficilement traduisible sans perdre leur sens original.
Vous l’avez peut-être remarqué en me lisant régulièrement. Quelques termes restent en italique lorsque je les écris. C’est plus fort que moi. Un framework reste un framework. Ce n’est pas vrai que je vais aller écrire « le cadre de travail .NET 4.5 ». Ça ne fonctionne juste pas! Même le site Stack Exchange dédié à la langue française est d’accord avec moi.
Ceci étant dit, l’autre mot que je n’arrive pas à me résoudre à traduire c’est le design pattern. Il s’agit de l’un des mots dans la même catégorie que le framework. Il s’écrit en italique sous sa forme anglaise. Point à la ligne.
Cela m’amène au sujet que je voulais amener dans ce billet. Il s’agit d’un design pattern dont j’ai connu le nom que tardivement. Ça a mis un nom sur l’une de mes principales approches lorsque je me lance dans un refactoring qui va mener à un ajout de fonctionnalités.
Il s’agit du Template Method Pattern. Il y a plusieurs variations de la façon de l’implémenter selon votre humeur et le langage que vous utilisez. Règle générale, en une phrase, il s’agit d’une classe qui implémente des fonctionnalités qui seront réutilisées par des sous instances de celle-ci.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class LinkGenerator | |
{ | |
public string GetLink(string url, string title) | |
{ | |
return string.Format(GetLinkFormatPattern(), url, title); | |
} | |
public virtual string GetLinkFormatPattern() | |
{ | |
return "<a href=\"{0}\">{1}</a>"; | |
} | |
} | |
public class BoldLinkGenerator : LinkGenerator | |
{ | |
public override string GetLinkFormatPattern() | |
{ | |
return "<strong><a href=\"{0}\">{1}</a></strong>"; | |
} | |
} | |
using System.Console; | |
public class Start | |
{ | |
public static void Main(string[] args) | |
{ | |
WriteLine(new LinkGenerator().GetLink("http://www.frenchcoding.com", "French Coding")); | |
WriteLine(new BoldLinkGenerator().GetLink("http://www.frenchcoding.com", "French Coding")); | |
ReadKey(); | |
} | |
} |
Le code qui est présenté ici est une conception simpliste du Template Method Design. Ce qui doit être cependant retenu c’est que LinkGenerator définit une implémentation de base qui peut être redéfini dans ses sous instances.
D’ailleurs, prenez note que l’exemple de code utilise le using Static de C# 6.0. C’est pour cette raison que les lignes 27 et 28 s’écrivent ainsi.
En guise de conclusion, cette approche est souvent le premier refactoring que je tente lorsque je dois revoir la structure d’un module. Réorganiser les propriétés et méthodes d’une classe afin d’en extraire les parties qui peuvent être réutilisées dans d’autres sous instances est un bon exercice pour déterminer ce qui peut être réécrit ou réutilisé.