O problema é que a camada de conexão dificilmente saberá que tipo de threads irão rodar sobre ela. E, se você está projetando o seu sistema para que mais de um programador dê manutenção, também é perigoso para você assumir esse tipo de coisa.
2. A conexão tem tempo de vida do lado do servidor;
Questionável: Dependente do tipo do driver e do tipo de uso que a aplicação o faz…
Isso jamais foi questionável. É uma premissa de qualquer servidor, por mais simples que seja. O tempo pode ser longo, mas ele sempre existe. Você deve no mínimo se prevenir para caso seu usuário deixe a máquina ligada numa manhã e resolva usar a aplicação no dia seguinte, ou para caso ele coloque o computador em stand by.
3. Conexões consomem recursos do banco de dados. Se o usuário estiver com a aplicação parada, essa conexão deveria estar fechada.
Questionável:
- Aplicações fat cliente tem recursos para suportar isso…diferentes de aplicações web…mas não é o caso.
Também não tem nada questionável. Os “recursos” que fat clientes tem para suportar isso são justamente um controle melhor da conexão, que o pool de conexões que recomendei faz. Caches e outros recursos apenas evitam que a conexão seja usada, mas não impede que ela se mantenha presa, se você não a fechar.
- Controle de sessão normalmente são feitos por critérios de segurança.
- É claro que pode ser fechado e reaberto quando o usuário voltar a usar…
- Unica justificativa para isso é quando a aplicação fat tiver multiplas thread transacionais simultâneas que são casos bem raros, caso contrario não existe arquiteturalmente requisitos que cubram isso.
Eu discordo. Abrir multiplas conexões para multiplas threads, é um único recurso do pool. Os outros dois itens que você citou também são controlados pela maioria dos pools de conexão. Eles também testar se a conexão está saudável e reciclam caso seja necessário. Caso não haja conexões disponíveis ele faz com que threads esperem, de maneira segura.
Enfim, não quis criticar exatamente o que você falou, mas a forma. Uma conexão sozinha não é o design pattern de um singleton que mantém uma conexão aberta para sempre (era isso que eu queria frizar). Esse sim, é um design pattern irresponsável. É muito melhor usar aplicações já existentes, como os pools, que controlam a abertura e o fechamento dessa conexão, e trabalhar com a filosofia de que, para a aplicação, a conexão está sempre fechada e não aberta. Mesmo que o pool gerencie uma conexão só.
Mas realmente, me enganei ao dizer que o número de conexões de uma aplicação desktop não é baixo, e certamente ele tende a uma só. Só quero deixar claro que não se pode confundir com o tal Singleton.