Bibliotecas de Componentes de Terceiros
Existem poucas aplicações que não dependam de bibliotecas de componentes de terceiros. Bibliotecas de terceiros ajudam a criar uma aplicação rica em recursos com funcionalidades ampliadas. Em alguns casos, o uso de uma biblioteca de terceiros é obrigatório. Por exemplo, um mecanismo de banco de dados pode precisar de um conjunto particular de componentes para conectar e executar consultas. Relatórios é outra área em que ferramentas de terceiros vêm à mente. Quando se trata de aplicações uniGUI, a compatibilidade com ferramentas de terceiros torna-se uma questão importante. Como descrito nas seções anteriores, a estabilidade de uma aplicação web depende de todos os elementos da aplicação. Uma biblioteca de terceiros com bugs, mal desenvolvida ou incompatível pode levar à instabilidade do servidor.
Há alguns pontos importantes a considerar ao escolher uma biblioteca de terceiros para uma aplicação uniGUI:
Compatibilidade
Servidores uniGUI rodam em um ambiente fortemente multithread. Qualquer ferramenta usada com uniGUI deve ser thread-safe — várias instâncias do componente devem ser capazes de rodar em várias threads em paralelo.
Componentes que dependem de variáveis globais provavelmente falharão em uma aplicação web. Cada instância do componente deve manter seus próprios dados privados ou proteger adequadamente dados compartilhados.
Componentes que dependem de controles VCL embutidos provavelmente afetarão a estabilidade do servidor. Controles VCL não são thread-safe (veja a documentação do VCL).
Algumas ferramentas de terceiros dependem de identificadores de janela (HWND) e loops de mensagem para funcionar. uniGUI não tem um thread principal e não implementa um loop de mensagens em todos os modos de implantação:
Standalone Server: empresta um thread principal do VCL do Delphi e cria um Form VCL minimizado; Application.Run() é chamado, portanto existe um loop de mensagens. Alguns componentes incompatíveis podem parecer funcionar nesse modo.
Módulo ISAPI (e Windows Service): nenhum form VCL é criado e Application.Run() não é chamado, portanto não há loop de mensagens. Qualquer componente que dependa do envio de mensagens (por exemplo, SendMessage()) pode falhar ou se comportar de forma diferente.
Exemplo: TRichEdit é um controle VCL (um Memo com texto formatado) que internamente usa SendMessage() para comunicar-se com seu Handle (HWND). Algumas ferramentas de relatório usam TRichEdit para gerar blocos de texto formatado. Um relatório usando TRichEdit pode renderizar corretamente no modo Standalone, mas não renderizar nada quando a mesma aplicação roda como um Windows Service ou módulo ISAPI por causa da ausência do loop de mensagens.
Alguns componentes de terceiros devem ser explicitamente configurados para ambientes com threads. Verifique o manual do fornecedor para instruções sobre threading.
Não use componentes que dependam de variáveis globais, que dependam de controles VCL sem garantias de thread-safety, ou que requeiram um loop de mensagens do Windows, a menos que o fornecedor suporte explicitamente os modos de implantação do uniGUI (Standalone, ISAPI, Windows Service).
Estabilidade
Qualquer componente de terceiros que tenha problemas de estabilidade afetará a estabilidade da aplicação uniGUI.
Bibliotecas de componentes devem estar livres de bugs críticos e testadas quanto a vazamentos de memória.
Os fornecedores devem garantir que seus componentes possam ser usados em um ambiente multi-thread sem causar crashes ou vazamentos de recursos.
Escalabilidade
Componentes de terceiros usados em uniGUI devem ser escaláveis: não deve haver um limite superior arbitrário no número de instâncias simultâneas que podem coexistir, exceto limites impostos pelos recursos do sistema.
Se um componente possui limites embutidos, o desenvolvedor deve estar ciente deles e projetar a aplicação de acordo.
Links relacionados
Developer's Guide > Application Design Considerations: https://unigui.com/doc/online_help/application-design-considerati.htm
Referência da página original: https://unigui.com/doc/online_help/index.html?third-party-component-librarie.htm