Efeito de plataforma interna.
Tendência dos arquitetos de software a replicar sua plataforma de desenvolvimento
O efeito de plataforma interna (inner-platform effect) é a tendência dos arquitetos de software a criar um sistema tão customizável que acaba se tornando uma réplica — e muitas vezes uma réplica ruim — da plataforma de desenvolvimento de software que estão usando. Isso geralmente é ineficiente, e esses sistemas costumam ser considerados exemplos de um antipadrão.
Exemplos
Exemplos são visíveis em softwares baseados em plugins, como alguns editores de texto e navegadores web, que frequentemente fazem com que desenvolvedores criem plugins que recriam software que normalmente rodaria sobre o próprio sistema operacional. O mecanismo de complementos do Firefox foi usado para desenvolver vários clientes FTP e navegadores de arquivos, que, na prática, replicam algumas das funcionalidades do sistema operacional, ainda que em uma plataforma mais restrita.
No mundo dos bancos de dados, os desenvolvedores às vezes são tentados a contornar o RDBMS, por exemplo armazenando tudo em uma única tabela grande com três colunas rotuladas como ID da entidade, chave e valor. Embora esse modelo entidade-atributo-valor permita ao desenvolvedor escapar da estrutura imposta por um banco de dados SQL, ele perde todos os benefícios, já que todo o trabalho que poderia ser feito de forma eficiente pelo RDBMS é jogado para a aplicação. As consultas ficam muito mais complicadas, os índices e o otimizador de consultas não conseguem mais funcionar de forma eficaz, e as restrições de validade dos dados não são aplicadas. O desempenho e a manutenibilidade podem ser extremamente ruins.
Uma tentação semelhante existe para o XML, onde os desenvolvedores às vezes preferem nomes de elementos genéricos e usam atributos para armazenar informações significativas. Por exemplo, todo elemento poderia se chamar item e ter os atributos type e value. Essa prática exige joins entre vários atributos para extrair significado. Como resultado, as expressões XPath ficam mais complicadas, a avaliação é menos eficiente e a validação estrutural traz pouco benefício.
Outro exemplo é o fenômeno dos web desktops, em que todo um ambiente de área de trabalho—muitas vezes incluindo um navegador web—roda dentro de um navegador (que, por sua vez, normalmente roda dentro do ambiente de área de trabalho fornecido pelo sistema operacional). Uma área de trabalho dentro de outra área de trabalho pode ser excepcionalmente desconfortável para o usuário e, por isso, isso geralmente só é feito para rodar programas que não podem ser facilmente implantados nos sistemas dos usuários finais, ou ocultando a área de trabalho externa.
Efeito
É normal que desenvolvedores de software criem uma biblioteca de funções personalizadas relacionadas ao seu projeto específico. O efeito de plataforma interna ocorre quando essa biblioteca cresce a ponto de incluir funções de propósito geral que duplicam funcionalidades já disponíveis como parte da linguagem de programação ou da plataforma. Como cada uma dessas novas funções geralmente chama várias das funções originais, elas tendem a ser mais lentas e, se mal escritas, também menos confiáveis.
Por outro lado, tais funções são frequentemente criadas para apresentar uma camada de abstração mais simples (e muitas vezes mais portável) sobre serviços de nível mais baixo que têm uma interface desajeitada, são complexos demais, não são portáveis ou são insuficientemente portáveis, ou simplesmente não combinam bem com código de aplicação de nível mais alto.
Usos apropriados
Uma plataforma interna pode ser útil por razões de portabilidade e separação de privilégios—em outras palavras, para que a mesma aplicação possa rodar em uma ampla variedade de plataformas externas sem afetar nada fora de um sandbox gerenciado pela plataforma interna. Por exemplo, a Sun Microsystems projetou a plataforma Java para atender a ambos os objetivos.