Design Pattern : Programmation chainée

Un objectif que je me donne en développant du code c’est de limiter le nombre de caractères que je dois taper pour réaliser ce que j’ai à livrer.

Bref, il faut tapper le moins de code possible. Ce qui rejoint parfaitement l’objectif du Spartan Programming et facilite par le fait même la maintenance et facilite la compréhension du code.

Voyons la situation classique d’instanciation d’objet :

https://gist.github.com/23638533

Ce que je n’aime pas dans ce code c’est la répétition de la variable smtpServerConfiguration. Tout ce que cela fait, c’est d’ajouter du bruit autour du but actuel du code.

Voilà qu’entre en jeu la désignation chaînée (Fluent Interfaces). Le but de la désignation chaînée est de pouvoir faciliter l’écriture de code en chaînant l’appel des fonctions.

De cette façon :

Configuration smtpServerConfiguration = new Configuration();
smtpServerConfiguration
.SetPort(3)
.SetServer("bob")
.SetTimeout(333);

view raw
gistfile1.cs
hosted with ❤ by GitHub

La conception d’une classe permettant ce genre d’appels est très simple et sa mise en place est liée étroitement à la programmation orientée objet.

class Configuration
{
private String _server { get; set; }
private int _timeout { get; set; }
private int _port { get; set; }
public Configuration SetPort(int port)
{
_port = port;
return this;
}
public Configuration SetServer(String server)
{
_server = server;
return this;
}
public Configuration SetTimeout(int timeout)
{
_timeout = timeout;
return this;
}
}

view raw
gistfile1.cs
hosted with ❤ by GitHub

Pour ceux d’entre-vous qui font du C#, ce genre d’appels doit vous sembler familier. Il s’agit en effet d’un des deux modes de requête possible avec LINQ. La désignation chaînée a été popularisée avec la venue de LINQ dans le monde .NET où il est possible du code comme celui-ci :

var result = session
.Query<Wine>()
.Where(p => p.Id == wineId))
.First()

view raw
gistfile1.cs
hosted with ❤ by GitHub

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.

2 réflexions sur “Design Pattern : Programmation chainée”

  1. Bel article !
    Tu pourrais même optimiser ta dernière requête LINQ comme ceci:

    var result = session
    .Query()
    .First(p => p.Id == wineId))

    1. En effet!

      Mon objectif était, cependant, plus de démontrer de quoi ça avait l’air dans le concret :)

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 Google

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

Image Twitter

Vous commentez à l’aide de votre compte Twitter. 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.