L'illustration de la page motifs de conception, des formes symboliques et répétitives, représentant les multiples occurences d'un caractère qui définissent un motif.
problématique récurrentesolution générique

Qu'est-ce qu'un motif de conception ?

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.

Le logo de RIMAROK.com, un glyphe symbolisant le passage et le formattage des idées, utilisé pour illustrer une citation.

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.

Un petit historique des motifs

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 :

  • Ce qui rend harmonieux un bâtiment c'est sa capacité à agréger des motifs et à les faire interagir entre eux,
  • Ces motifs peuvent être décrits et identifiés pour former un langage, que l'on peut apprendre à parler et qui fait que les "bâtiments fonctionnent".

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.

Une constellation d'étoiles utilisée comme séparateur de sections, pour un effet cosmétique.

Autres réflexions sur le sens du mot motif

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.

  • Dans son sens courant, un motif est un ensemble de propriétés qui se répètent (occurences) dans un groupe d'individus (ex: motifs d'une frise, dans une population d'individus, etc.),
  • Dans le dictionnaire, on lit également : ce qui pousse à agir, ce qui justifie, intention,
  • Enfin, "patron" vient de la racine "pater" dont la masculinité ne peut pas nous laisser indifférent à l'époque à laquelle on vit,

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 logo de RIMAROK.com, un glyphe symbolisant le passage et le formattage des idées, utilisé pour illustrer une citation.

Le motif motif est une instance de lui-même.

implémentationcontextedescription

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.

répertoirework in progress

Liste des motifs informatiques

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* : 131.

* Pas forcément détaillés.

Nom du motifDescriptionSynonymes
EntitéQuelque chose, un concept, une représentation, un individu ou une part d’un individu.individu, chose
EnsembleGroupe d’entités, défini par un (ou plusieurs) critère(s) et qui existe par discrimination de son extérieur.groupe
ValeurContenu (retourné) d’une entité, à interpréter selon son type. donnée, 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, caractéristique, prop, property, qualité
NomMot, ou groupe de mots, pas forcément unique, désignant une entité, parfois porteur de sens.name
VariableEntité dont la valeur peut changer.var
IdentifiantValeur unique (dans un contexte) permettant d’identifier une entité précisément.id, identifier
TitreRemplace le nom pour mettre en valeur, et éventuellement résumer, une entité (objet, page, section …).title
AliasNom alternatif d’une entité, référence/proxy d’une valeur.
MotifRécurrence d’un caractère, ou d’un groupe de caractères, dans un ensemble d’entités.
InstanceOccurrence 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é).
TypeFormalisation de la structure d’une entité par restriction de la valeur possible pour ses propriétés.
ObjetUne entité conceptuelle porteuse de propriétés.
ClasseStructure typée d’objets, incluant propriétés et fonctions (méthodes), ainsi qu’un (ou plusieurs) constructeur(s).
RéférencePas l’entité même, mais un pointeur/une redirection vers elle. La valeur est la cible.ref
BooléenUne valeur binaire : vrai/faux, 1/0, oui/non.boolean
NombreUne valeur représentée par une quantité, pouvant ou non être entière.number
Chaîne de caractèresUne suite de caractères alphanumériques considérés comme une seule et même entité.
Tableauarray
Étiquettetag
Énumérationenum
Catégorie
Composant
Page
Fichier
DossierEnsemble nommé pouvant contenir des fichiers et d’autres dossiers.
ContexteNamespace, Portée, Scope, Périmètre
FonctionEncapsulation d’instructions dans un bloc réutilisable. Peut recevoir des paramètres, les transformer et retourner un résultat.
Fonction / Paramètre
UsineUne fonction instanciant et retournant un objet sur la base d’un (ou plusieurs) type(s) donné(s).Factory
Composant / ConteneurComposant encapsulant d’autres composants.
UniqueValeur 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
Collectiontable
FiltreSélectionne les entités d’un ensemble qui répondent à certaines conditions.
OrdreOrdonnance les entités d’un ensemble en fonction de certaines propriétés.Ordonnancement
Modèle de pageTemplate
AgencementLayout, Mise en page
Url
Slug
Domaine
Site
Base de donnéesFait 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
ModuleDépendance, bibliothèque
JS / Tableau / Map
JS / Map
JS / Set
Parenthèses
Généralisation et spécialisationUn 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.héritage
ConstanteAssociation immuable d’une valeur à une entité (par opposition aux variables).const
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 ternnairecondition ? result : alt
Et&&
Requête
AJAX
Langage
JetonToken
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ètreScope
JS / Let
Cache
Archivage
Base de données / Jonction
JournalLogs
Historique
Supprimer
Modifier
Créer
JS / Try Catch
Erreur
JS / Destructuration
Memoisation
JS / Await
JS / Async
Version
Favori
CronRoutine
JS / Stricte égalité
React / Enfant
État
Git / Commit
Version
Git / Branche
Clé-valeur
Produit
Article
Portée
Set
LotRegroupement de plusieurs opérations en une, par exemple pour mettre à jour plusieurs entités en une requête.Batch
Modulo
Convention de nommageAu sein d’un projet/d’une équipe, établit une façon d’écrire le nom des variables, des fonctions, des fichiers, des tables d’une base-de-données, etc.naming convention
IndexLa clé, le numéro d’emplacement, d’un objet itératifi
CléNom d’une propriété d’un objet
Encapsulation
Cas d’utilisation
NœudPoint de convergence de flux (2 ou plus).node, carrefour
DépendanceRelation de composition où une entité dépend de l’existence d’une autre entité, soit fortement en ne pouvant exister sans celle-ci, soit “mollement” en se privant de certains fonctionnalités en absence de l’entité dont elle dépend.requirement
intelligence collectivecontactamélioration continue

Contribuer

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 :

Le logo de RIMAROK.com, un glyphe symbolisant le passage et le formattage des idées, utilisé pour illustrer une citation.

C'est proprement exponentiel et inconcevable !

Restez connecté !