ConstructiCat Logo
CodeBust.
Browse section ▾

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.

Ejemplos

Hay ejemplos visibles en el software basado en complementos, como algunos editores de texto y navegadores web, 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 se ha utilizado para desarrollar varios clientes FTP y exploradores de archivos, que efectivamente replican algunas de las funciones del sistema operativo, aunque sobre una plataforma más restringida.

En el mundo de las bases de datos, los desarrolladores a veces se ven tentados a saltarse el RDBMS, por ejemplo, almacenándolo todo en una única tabla enorme con tres columnas etiquetadas como ID de entidad, clave y valor. Aunque este modelo entidad-atributo-valor permite al desarrollador escapar de la estructura impuesta por una base de datos 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 y el optimizador de consultas ya no pueden funcionar de forma eficaz, y las restricciones de validez de los datos no se aplican. El rendimiento y la mantenibilidad pueden ser extremadamente pobres.

Existe una tentación similar con 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) entre varios atributos para extraer el significado. Como resultado, las expresiones 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, donde todo un entorno de escritorio —a menudo incluido un navegador web— se ejecuta dentro de un navegador (que a su vez normalmente se ejecuta dentro del entorno de escritorio proporcionado por el sistema operativo). 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) gestionado por la plataforma interna. Por ejemplo, Sun Microsystems diseñó la plataforma Java para cumplir ambos objetivos.