---
title: "Effet de plateforme interne"
type: "antipattern"
slug: "inner-platform-effect"
url: "http://localhost:3000/fr/antipatterns/inner-platform-effect.md"
description: "Tendance des architectes logiciels à reproduire leur plateforme de développement"
---
# Effet de plateforme interne

> Tendance des architectes logiciels à reproduire leur plateforme de développement

L’**effet de plateforme interne** est la tendance des architectes logiciels à créer un système si personnalisable qu’il finit par devenir une réplique, et souvent une mauvaise réplique, de la plateforme de développement logiciel qu’ils utilisent. Cela est généralement inefficace et de tels systèmes sont souvent considérés comme des exemples d’[anti-patron](https://en.wikipedia.org/wiki/Anti-pattern "Anti-pattern").

## Exemples

On en trouve des exemples dans les logiciels reposant sur des [greffons](https://en.wikipedia.org/wiki/Plug-in%5F%28computing%29 "Plug-in (computing)"), comme certains [éditeurs de texte](https://en.wikipedia.org/wiki/Text%5Feditor "Text editor") et [navigateurs web](https://en.wikipedia.org/wiki/Web%5Fbrowser "Web browser"), qui amènent souvent les développeurs à créer des greffons recréant des logiciels qui s’exécuteraient normalement par-dessus le système d’exploitation lui-même. Le mécanisme de modules complémentaires de [Firefox](https://en.wikipedia.org/wiki/Firefox "Firefox") a servi à développer un certain nombre de clients [FTP](https://en.wikipedia.org/wiki/File%5FTransfer%5FProtocol "File Transfer Protocol") et de [navigateurs de fichiers](https://en.wikipedia.org/wiki/File%5Fbrowser "File browser"), qui reproduisent effectivement certaines fonctionnalités du [système d’exploitation](https://en.wikipedia.org/wiki/Operating%5Fsystem "Operating system"), quoique sur une plateforme plus restreinte.

Dans le monde des [bases de données](https://en.wikipedia.org/wiki/Database "Database"), les développeurs sont parfois tentés de contourner le [SGBDR](https://en.wikipedia.org/wiki/RDBMS "RDBMS"), par exemple en stockant tout dans une seule grande [table](https://en.wikipedia.org/wiki/Table%5F%28database%29 "Table (database)") à trois [colonnes](https://en.wikipedia.org/wiki/Column%5F%28database%29 "Column (database)") intitulées identifiant d’entité, clé et valeur. Si ce [modèle entité-attribut-valeur](https://en.wikipedia.org/wiki/Entity-attribute-value%5Fmodel "Entity-attribute-value model") permet au développeur de s’affranchir de la structure imposée par une base de données [SQL](https://en.wikipedia.org/wiki/SQL "SQL"), il en perd tous les avantages, puisque tout le travail que le SGBDR pourrait effectuer efficacement est reporté sur l’application. Les requêtes deviennent bien plus alambiquées, les [index](https://en.wikipedia.org/wiki/Index%5F%28database%29 "Index (database)") et l’[optimiseur de requêtes](https://en.wikipedia.org/wiki/Query%5Foptimizer "Query optimizer") ne peuvent plus fonctionner efficacement, et les [contraintes de validité des données](https://en.wikipedia.org/wiki/Data%5Fvalidation "Data validation") ne sont pas appliquées. Les performances et la maintenabilité peuvent être extrêmement mauvaises.

Une tentation similaire existe pour [XML](https://en.wikipedia.org/wiki/XML "XML"), où les développeurs privilégient parfois des noms d’éléments génériques et utilisent des attributs pour stocker l’information utile. Par exemple, chaque élément pourrait être nommé _item_ et posséder les attributs _type_ et _value_. Cette pratique nécessite des [jointures](https://en.wikipedia.org/wiki/Join%5F%28relational%5Falgebra%29 "Join (relational algebra)") sur plusieurs attributs afin d’en extraire le sens. Par conséquent, les expressions [XPath](https://en.wikipedia.org/wiki/XPath "XPath") sont plus alambiquées, l’évaluation est moins efficace et la validation structurelle n’apporte que peu d’avantages.

Un autre exemple est le phénomène des [bureaux web](https://en.wikipedia.org/wiki/Web%5Fdesktop "Web desktop"), où tout un [environnement de bureau](https://en.wikipedia.org/wiki/Desktop%5Fenvironment "Desktop environment")—incluant souvent un [navigateur web](https://en.wikipedia.org/wiki/Web%5Fbrowser "Web browser")—s’exécute à l’intérieur d’un navigateur (lequel s’exécute lui-même généralement au sein de l’environnement de bureau fourni par le [système d’exploitation](https://en.wikipedia.org/wiki/Operating%5Fsystem "Operating system")). Un bureau dans un bureau peut être particulièrement malcommode pour l’utilisateur, et cela n’est donc généralement fait que pour exécuter des programmes qui ne peuvent pas être facilement déployés sur les systèmes des utilisateurs finaux, ou en masquant le bureau externe.

## Effet

Il est normal que les développeurs logiciels créent une bibliothèque de fonctions personnalisées propres à leur projet. L’effet de plateforme interne survient lorsque cette bibliothèque s’étend pour inclure des fonctions à usage général qui dupliquent des fonctionnalités déjà disponibles au sein du langage de programmation ou de la plateforme. Comme chacune de ces nouvelles fonctions appelle généralement un certain nombre des fonctions d’origine, elles ont tendance à être plus lentes et, si elles sont mal codées, moins fiables également.

D’un autre côté, de telles fonctions sont souvent créées pour présenter une couche d’abstraction plus simple (et souvent plus portable) par-dessus des services de plus bas niveau qui, soit ont une interface peu commode, sont trop complexes, non portables ou insuffisamment portables, soit conviennent tout simplement mal au code applicatif de plus haut niveau.

## Usages appropriés

Une plateforme interne peut s’avérer utile pour des raisons de portabilité et de séparation des privilèges—autrement dit, afin qu’une même application puisse s’exécuter sur une grande variété de plateformes externes sans rien affecter en dehors d’un [bac à sable](https://en.wikipedia.org/wiki/Sandbox%5F%28computer%5Fsecurity%29 "Sandbox (computer security)") géré par la plateforme interne. Par exemple, Sun Microsystems a conçu la [plateforme Java](https://en.wikipedia.org/wiki/Java%5F%28software%5Fplatform%29 "Java (software platform)") pour atteindre ces deux objectifs.
