Les design patterns, ou motifs de conception, sont un outil conceptuel très important pour le développement web et l'ingénierie logicielle.
Ils adressent chacun une problématique récurrente qui apparaît lorsque l'on développe des projets informatiques.
Dans le sens qui nous intéresse, un motif de conception consiste en une description du problème, permettant de l'identifier, une solution générique et efficace est présentée.
Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem [...].
- A Pattern Language,Cristopher Alexander
C'est un mode d'emploi, qui donne des super-pouvoirs dans le code, utilisables dans n'importe quel environnement de développement.
Tout commence dans les années 70 avec Cristopher Alexander et ses deux livres : The Timeless Way of Building et A pattern langage.
Il y propose les principes suivants :
Or, ces deux principes s'appliquent aussi très bien au développement logiciel !
C'est ce que constatent et formalisent le Gang des 4 dans leur livre Design Patterns: Elements of Reusable Object-Oriented Software.
Depuis c'est une source d'inspiration intarissable pour de nombreux développeurs.
Mais je pense qu'avec les motifs on peut (on doit) aller plus loin ...
Considérant que tout est motif, des concepts fondamentaux du développement jusqu'à ceux des langages, des frameworks et métiers,une application doit être conçue en conscience du langage qu'elle implémente.
La raison pour laquelle je préfère utiliser le terme motifs de conception plutôt que patrons de conception et que je trouve l'etymologie plus pertinente.
Les motifs sont donc tout ce qui se répète et se compose pour former un projet informatique.
Du plus petit symbole de langage, jusqu'au composant le plus complexe.
Mais attention, ne remontez pas trop loin dans l'abstraction ou vous pourriez perdre votre raison en tentant de résoudre l'équation :
Le motif motif est une instance de lui-même.
Je présente ici mon propre langage de motifs, fait de ceux que je connais et que je sais mettre en relation.
Dans le temps, j'aimerais beaucoup pouvoir ajouter leur description, le problème qu'ils adressent et la façon dont ils proposent d'y répondre.
Cette liste est forcément non-exhaustive, et je vous incite fortement à y contribuer :)
Compte des motifs répertoriés* : 125.
* Pas forcément détaillés.
Nom du motif | Description | Synonymes |
---|---|---|
Entité | Quelque chose, un concept, une représentation, un individu ou une part d’un individu. | individu, chose, donnée |
Ensemble | Groupe d’entités, défini par un (ou plusieurs) critère(s) et qui existe par discrimination de son extérieur. | groupe |
Valeur | Contenu (retourné) d’une entité, à interpréter selon son type. | contenu |
Propriété | Caractère d’une entité, pouvant être définie par un type, et pouvant porter ou non une valeur. | attribut, caractère, prop, property |
Nom | Mot, ou groupe de mots, pas forcément unique, désignant une entité, parfois porteur de sens. | name |
Variable | Associe un nom à une valeur variable. La valeur peut-être un nombre, un texte, une entité, un ensemble, une propriété de l’un ou l’autre, et bien plus encore. | var |
Identifiant | Valeur unique (dans un contexte) permettant d’identifier une entité précisément. | id, identifier |
Titre | Remplace le nom pour mettre en valeur, et éventuellement résumer, une entité (objet, page, section …). | title |
Alias | Nom alternatif d’une entité, référence/proxy d’une valeur. | |
Motif | Récurrence d’un caractère, ou d’un groupe de caractères, dans un ensemble d’entités. | |
Instance | Occurrence d’un motif dans une entité; dans le code, objet créé sur le modèle d’un type, d’une classe (qui l’aurait alors instancié). | |
Type | Formalisation de la structure d’une entité par restriction de la valeur possible pour ses propriétés. | |
Objet | Une entité conceptuelle porteuse de propriétés. | |
Classe | Structure typée d’objets, incluant propriétés et fonctions (méthodes), ainsi qu’un (ou plusieurs) constructeur(s). | |
Reference | Pas l’entité même, mais un pointeur/une redirection vers elle. | |
Booléen | Une valeur binaire : vrai/faux, 1/0, oui/non. | |
Nombre | Une valeur représentée par une quantité, pouvant ou non être entière. | |
Chaîne de caractères | Une suite de caractères alphanumériques considérés comme une seule et même entité. | |
Tableau | ||
Étiquette | ||
Énumération | ||
Catégorie | ||
Composant | ||
Page | ||
Fichier | ||
Dossier | Ensemble nommé pouvant contenir des fichiers et d’autres dossiers. | |
Contexte | Namespace, Portée, Scope, Périmètre | |
Fonction | ||
Fonction / Paramètre | ||
Usine | Une fonction instanciant et retournant un objet sur la base d’un (ou plusieurs) type(s) donné(s). | Factory |
Composant / Conteneur | Composant encapsulant d’autres composants. | |
Unique | Valeur non répétée dans un contexte, ou entité identifiable individuellement par le biais de l’un (ou plusieurs) de ses attributs. | |
Itération | ||
Collection | table | |
Filtre | Sélectionne les entités d’un ensemble qui répondent à certaines conditions. | |
Ordre | Ordonnance les entités d’un ensemble en fonction de certaines propriétés. | Ordonnancement |
Modèle de page | Template | |
Agencement | Layout, Mise en page | |
Url | ||
Slug | ||
Domaine | ||
Site | ||
Base de données | Fait persister les données sous forme de collections d’objets, plus ou moins typées et/ou relationnelles; et permet d’interagir avec. | database |
Serveur | ||
JS / Serveur | ||
Client | ||
UI | ||
API | ||
Authentification | ||
API / Clé | ||
Utilisateur | ||
Permission | ||
Rôle | ||
Module | Dépendance, bibliothèque | |
JS / Tableau / Map | ||
JS / Map | ||
JS / Set | ||
Parenthèses | ||
Généralisation et spécialisation | Un objet ou une classe sont dits plus génériques moins dotés ils sont en attributs. Spécialiser c’est restreindre la définition par ajouts d’attributs. | |
Constante | Association d’un nom à une valeur immuable (par opposition aux variables). | |
HTML / Balise | ||
Incrément | ||
Décrément | ||
CSS / Selecteur | ||
CSS / Règle | ||
Thème | ||
Variation | ||
Get | ||
JS / Export | ||
JS / Reduce | ||
JS / Promise | ||
React / Composant | ||
Déplier | ||
Menu | ||
Paramètre | ||
Ou | || | |
JS / Switch | ||
JS / Opérateur ternnaire | condition ? result : alt | |
Et | && | |
Requête | ||
AJAX | ||
Langage | ||
Jeton | Token | |
Symbole | ||
Négation | ||
Node JS / Écrire un fichier | ||
Composant UI / Carte | ||
Environnement | ||
Test | ||
RIMAROK.com / Code-joyau | ||
Déploiement | ||
Automatisation du processus de déploiement | ||
JS / Périmètre | Scope | |
JS / Let | ||
JS / Const | ||
Cache | ||
Archivage | ||
Base de données / Jonction | ||
Journal | Logs | |
Historique | ||
Supprimer | ||
Modifier | ||
Créer | ||
JS / Try Catch | ||
Erreur | ||
JS / Destructuration | ||
Memoisation | ||
JS / Await | ||
JS / Async | ||
Version | ||
Favori | ||
Cron | Routine | |
JS / Stricte égalité | ||
React / Enfant | ||
État | ||
Git / Commit | ||
Version | ||
Git / Branche | ||
Clé-valeur | ||
Produit | ||
Article | ||
Portée | ||
Set | ||
Lot | Regroupement de plusieurs opérations en une, par exemple pour mettre à jour plusieurs entités en une requête. | Batch |
Modulo |
Pour étendre ce dictionnaire de motifs, vous pouvez me contacter directement ou bien même ouvrir une PR sur Github.
Le langage des motifs est sans (début ni) fin.
Il est aussi vaste que l'intersection de tous les contextes et problématiques métiers :
C'est proprement exponentiel et inconcevable !
Restez connecté !
Comment utiliser un motif ?
Un motif est une idée et doit être implémenté avant d'être utilisé dans le code.
L'implémentation d'un motif dépend du langage, du paradigme, du métier et, en pour partie, des humains impliqués dans le projet.
Dans A Pattern Language, la solution générique proposée pour répondre à un problème peut être materialisée en suivant la description de celui-ci.
La plupart des motifs apparaissent tout seul et il convient simplement de les reconnaître pour, éventuellement les corriger, mais surtout les connecter.
La difficulté réside essentiellement là : assembler correctement toutes ces occurences de motifs pour former le plus fluide et élégant langage de motifs.