opa, bom BugBug?
Então, esse jeito que você escreveu é o jeito errado que eu falei de como resolver o problema.
Mas porque errado né? Seguinte, imagina agora que eu vou dar suporte a 30 bancos de dados diferentes... você vai deixar no meio do código um switch case de 30 opções ou vai extrair isso para uma classe (não estamos falando de programação funcional nesse exemplo hein) diferente?
Se você extrair pra uma classe diferente, provavelmente você vai usar uma factory.
Lembrando que o seu exemplo nao segue o princípio Open Closed porque a cada novo jeito de salvar vai precisar mudar esse código... o que vai pioriando ele a cada vez que você muda.
Mas, sim, TUDO pode ser resolvido só com loop e if/else a questão e se voce wuer estrurar o código ou não...
Outra coisa, se os padrões de programação orientada a objeto nao fazem sentido na programação funcional... bom, é porque eles são padrões de orientação a objeto. Em programação funcional os padrões são outros. Nessa caso aí você pode fazer uma high order function e só receber a função que salva de acordo com a necessidade, valeu!
Opa, bão.
Ok, vou imaginar seu exemplo.
Então agora eu tenho esse código:
function salvarBancoPostgres() {}
// mais 30 funções de bancos...
export function salvarDado(dado, salvarOnde) {
switch(salvarOnde) {
case bancoPostgres: salvarBancoPostgres(dado)
case bancoMySQL: salvarBancoMySQL(dado)
case bancoRedis: salvarBancoRedis(dado)
case bancoMongo: salvarBancoMongo(dado)
case arquivo: salvarArquivo(dado)
// mais 30 cases de bancos...
}
}
Pra adicionar mais um banco é só criar a função dele e adicionar uma linha no switch case.
Agora pergunto: O que iria piorar? Qual é a vantagem de usar um factory?
Outra coisa, se os padrões de programação orientada a objeto nao fazem sentido na programação funcional... bom, é porque eles são padrões de orientação a objeto.
Não entendi a relação disso com o assunto mas tudo bem.