Éditer sur GitHub

Fluent Interface

Problème

Nous souhaitons simplifier la construction d'objets complexes induisant des codes du style suivant :

const person = new Person();
person.setName("John Doe");
person.setAddress("73 Av. de Paris, 94160 Saint-Mandé");

Nous remarquons que nous multiplions les appels à person. et que le patron de conception Builder ne nous permettrait pas de simplifier le code.

Solution

Nous pouvons renvoyer l'objet courant dans les setters pour permettre le chaînage des appels :

class Person {
    name: string;
    address: string;

    setName(name: string): this {
        this.name = name;

        return this; // Renvoie l'objet courant
    }

    setAddress(address: string): this {
        this.address = address;

        return this; // Renvoie l'objet courant
    }

}

Nous obtenons ainsi un code plus lisible :

const person = new Person()
    .setName("John Doe")
    .setAddress("73 Av. de Paris, 94160 Saint-Mandé")
;
// {"name":"John Doe","address":"73 Av. de Paris, 94160 Saint-Mandé"}
console.log(JSON.stringify(person));