---
title: "Efecto de plataforma interna"
type: "antipattern"
slug: "inner-platform-effect"
url: "http://localhost:3000/es/antipatterns/inner-platform-effect.md"
description: "Tendencia de los arquitectos de software a replicar su plataforma de desarrollo"
---
# Efecto de plataforma interna

> Tendencia de los arquitectos de software a replicar su plataforma de desarrollo

El **efecto de plataforma interna** es la tendencia de los arquitectos de software a crear un sistema tan personalizable que acaba convirtiéndose en una réplica, y a menudo una mala réplica, de la propia plataforma de desarrollo de software que están utilizando. Esto suele ser ineficiente y, con frecuencia, tales sistemas se consideran ejemplos de un [antipatrón](https://en.wikipedia.org/wiki/Anti-pattern "Anti-pattern").

## Ejemplos

Hay ejemplos visibles en el software basado en [complementos](https://en.wikipedia.org/wiki/Plug-in%5F%28computing%29 "Plug-in (computing)"), como algunos [editores de texto](https://en.wikipedia.org/wiki/Text%5Feditor "Text editor") y [navegadores web](https://en.wikipedia.org/wiki/Web%5Fbrowser "Web browser"), que a menudo hacen que los desarrolladores creen complementos que recrean software que normalmente se ejecutaría sobre el propio sistema operativo. El mecanismo de extensiones de [Firefox](https://en.wikipedia.org/wiki/Firefox "Firefox") se ha utilizado para desarrollar varios clientes [FTP](https://en.wikipedia.org/wiki/File%5FTransfer%5FProtocol "File Transfer Protocol") y [exploradores de archivos](https://en.wikipedia.org/wiki/File%5Fbrowser "File browser"), que efectivamente replican algunas de las funciones del [sistema operativo](https://en.wikipedia.org/wiki/Operating%5Fsystem "Operating system"), aunque sobre una plataforma más restringida.

En el mundo de las [bases de datos](https://en.wikipedia.org/wiki/Database "Database"), los desarrolladores a veces se ven tentados a saltarse el [RDBMS](https://en.wikipedia.org/wiki/RDBMS "RDBMS"), por ejemplo, almacenándolo todo en una única [tabla](https://en.wikipedia.org/wiki/Table%5F%28database%29 "Table (database)") enorme con tres [columnas](https://en.wikipedia.org/wiki/Column%5F%28database%29 "Column (database)") etiquetadas como ID de entidad, clave y valor. Aunque este [modelo entidad-atributo-valor](https://en.wikipedia.org/wiki/Entity-attribute-value%5Fmodel "Entity-attribute-value model") permite al desarrollador escapar de la estructura impuesta por una base de datos [SQL](https://en.wikipedia.org/wiki/SQL "SQL"), pierde todas sus ventajas, ya que todo el trabajo que el RDBMS podría realizar de forma eficiente recae ahora sobre la aplicación. Las consultas se vuelven mucho más enrevesadas, los [índices](https://en.wikipedia.org/wiki/Index%5F%28database%29 "Index (database)") y el [optimizador de consultas](https://en.wikipedia.org/wiki/Query%5Foptimizer "Query optimizer") ya no pueden funcionar de forma eficaz, y las [restricciones de validez de los datos](https://en.wikipedia.org/wiki/Data%5Fvalidation "Data validation") no se aplican. El rendimiento y la mantenibilidad pueden ser extremadamente pobres.

Existe una tentación similar con [XML](https://en.wikipedia.org/wiki/XML "XML"), donde los desarrolladores a veces prefieren nombres de elementos genéricos y usan atributos para almacenar información significativa. Por ejemplo, cada elemento podría llamarse _item_ y tener los atributos _type_ y _value_. Esta práctica requiere [uniones (joins)](https://en.wikipedia.org/wiki/Join%5F%28relational%5Falgebra%29 "Join (relational algebra)") entre varios atributos para extraer el significado. Como resultado, las expresiones [XPath](https://en.wikipedia.org/wiki/XPath "XPath") son más enrevesadas, la evaluación es menos eficiente y la validación estructural aporta poco beneficio.

Otro ejemplo es el fenómeno de los [escritorios web](https://en.wikipedia.org/wiki/Web%5Fdesktop "Web desktop"), donde todo un [entorno de escritorio](https://en.wikipedia.org/wiki/Desktop%5Fenvironment "Desktop environment") —a menudo incluido un [navegador web](https://en.wikipedia.org/wiki/Web%5Fbrowser "Web browser")— se ejecuta dentro de un navegador (que a su vez normalmente se ejecuta dentro del entorno de escritorio proporcionado por el [sistema operativo](https://en.wikipedia.org/wiki/Operating%5Fsystem "Operating system")). Un escritorio dentro de un escritorio puede resultar inusualmente incómodo para el usuario y, por tanto, esto generalmente solo se hace para ejecutar programas que no pueden desplegarse fácilmente en los sistemas de los usuarios finales, o para ocultar el escritorio exterior.

## Efecto

Es normal que los desarrolladores de software creen una biblioteca de funciones personalizadas relacionadas con su proyecto específico. El efecto de plataforma interna se produce cuando esta biblioteca crece hasta incluir funciones de propósito general que duplican una funcionalidad ya disponible como parte del lenguaje de programación o de la plataforma. Dado que cada una de estas nuevas funciones generalmente llamará a varias de las funciones originales, tienden a ser más lentas y, si están mal programadas, también menos fiables.

Por otro lado, tales funciones suelen crearse para ofrecer una capa de abstracción más sencilla (y a menudo más portable) sobre servicios de más bajo nivel que tienen una interfaz incómoda, son demasiado complejos, no son portables o lo son de forma insuficiente, o simplemente encajan mal con el código de aplicación de más alto nivel.

## Usos apropiados

Una plataforma interna puede ser útil por motivos de portabilidad y de separación de privilegios; en otras palabras, para que la misma aplicación pueda ejecutarse en una amplia variedad de plataformas externas sin afectar a nada fuera de un [entorno aislado (sandbox)](https://en.wikipedia.org/wiki/Sandbox%5F%28computer%5Fsecurity%29 "Sandbox (computer security)") gestionado por la plataforma interna. Por ejemplo, Sun Microsystems diseñó la [plataforma Java](https://en.wikipedia.org/wiki/Java%5F%28software%5Fplatform%29 "Java (software platform)") para cumplir ambos objetivos.
