Eu tenho um tipo de processo de "pipeline" que é basicamente vincular várias ferramentas existentes para automatizar um fluxo de trabalho. Para uma das etapas, existe uma ferramenta de linha de comando existente que já executa o que a etapa precisa fazer.
A ferramenta CLI externa é baseada em java, assim como o meu pipeline, portanto, seria possível integrar a ferramenta diretamente na etapa do pipeline, mas a ferramenta é muito complexa e atualmente está intimamente ligada à entrada na linha de comando (algo como 37 opções de sinalizador de configuração).
A pergunta é: é uma idéia melhor simplesmente chamar e chamar o processo externo, ou seria melhor integrar o código externo no meu aplicativo?
Quais são os prós / contras de integrar vs. chamar o processo externo?
fonte
Respostas:
É muito melhor integrar essas coisas.
A interface da linha de comandos é apenas uma interface, e especialmente horrível. É essencial, mas também é cheio de peculiaridades e limitações que não são sensatas.
Cada uma das "ferramentas existentes para automatizar um fluxo de trabalho" deve ter uma classe organizada que faça o trabalho real após a análise das opções da linha de comando.
Idealmente, a
public static void main
função faz duas coisas em cada uma dessas "ferramentas existentes".Ele chama algum analisador de opção / argumento da linha de comando.
Invoca a classe organizada que faz o trabalho real. Pense em uma tarefa do Ant ou uma tarefa do Maven que faça o trabalho real depois que o Ant ou o Maven tiver lidado com toda a análise e tomada de decisão.
Quando você vai integrar essas coisas, deseja as classes organizadas que fazem o trabalho real.
Se eles não existirem, será necessário reescrever todas essas ferramentas para criar a classe organizada que faz o trabalho real, separada de toda a análise de linha de comando.
Para obter orientação sobre como essas classes organizadas devem funcionar, leia Ant (ou Maven) para ver como elas definem as várias tarefas do trabalhador. É um bom modelo mental de como várias coisas diferentes são integradas sem voltar à linha de comando.
fonte
main
método, os métodos de análise de CLI etc. É bastante desagradável :(Eu diria que deixe em paz se funcionar.
Como programador, você agrega valor à sua organização resolvendo problemas com o software. Resolver mais problemas de qualidade e quantidade dentro de um determinado período de tempo está diretamente relacionado ao seu valor na organização. Passar esse tempo para criar código diminui o seu valor, pois isso o impede de resolver um problema mais importante.
No entanto, alguns fatores que podem reduzir o tempo gasto seriam escalabilidade e se houvesse alguma preocupação com a estabilidade dos programas externos.
fonte
Não é "melhor" ou "pior". Existem simplesmente custos e benefícios diferentes.
Geralmente, é mais caro escrever e manter um software, quanto maior o número de pontos de integração, maior a complexidade.
Observe que estes são os custos de integração que você deve considerar em relação ao custo total, que inclui, entre outras coisas, o custo para escrever e manter o software.
Pode ser que você seja um programador muito inexperiente, mas um usuário avançado de longa data.
A melhor maneira de descobrir:
É calcular os custos para si mesmo. O custo será diferente para diferentes ambientes, situações e pessoas. Na maioria das vezes, custa mais chamar a linha de comando, mas nem sempre e a única maneira de garantir que ela faça a análise.
fonte
Idealmente, você deseja integrá-lo. Especialmente se este for um aplicativo distribuído - reduzir o número de dependências e configurações facilitará isso. Mas é claro que é uma questão de custo / benefício para o seu caso específico.
Dito isto, uma coisa a considerar é a estabilidade. Encontrei algo semelhante há alguns anos e mantive o programa cli no lugar. Era muito instável, e eu não queria que sua falha derrubasse o aplicativo pai, que precisava ser executado 24/7. Agora, este não era um aplicativo java, mas, mesmo assim, se for um problema que possa ser aplicado, convém manter isso em consideração.
fonte