Estou planejando integrar uma ferramenta externa ( ffmpeg no meu caso em particular, mas poderia ser qualquer coisa, de fato, tanto quanto suas tarefas são longas). Essa ferramenta possui muitos parâmetros de linha de comando.
Por enquanto, eu fiz coisas simples com ele, já exigindo um bom monte de redação de classe, para incorporar todas as informações que ele pode retornar para mim.
Agora enfrento a tarefa ainda mais complexa de ter que enviar vários parâmetros e lidar com possíveis erros.
Então, qual é a melhor maneira para isso?
- Crie classes contendo todas as opções possíveis
- Confiando em um equivalente reverso de commons-cli / CliBuilder / OptionParser
- Escreva diretamente todas as opções da entrada do usuário
- Poderes Obiwan Kenobi (ou qualquer coisa que eu nem saiba)
Observe que eu faço isso em uma linguagem incomum (pelo bem de mim, não me pergunte o que é, pois parece uma união desesperada e estéril entre o CoffeeScript e a lua ), como conseqüência, não pode haver estrutura fazendo o que eu quero no idioma que eu uso.
Respostas:
Suponho que a resposta ortodoxa seria descobrir qual modelo de domínio a ferramenta incorpora, depois escrever alguns objetos que expressem esse modelo em sua linguagem e saber como construir linhas de comando. Não conheço bem o ffmpeg, mas acredito que o modelo está fluindo de um arquivo de origem para um arquivo de saída, cada um em um formato específico, através de uma série de filtros. Talvez você tenha uma classe FfmpegJob que possui dois objetos SoundFile, um para entrada e outro para saída, e uma lista (que pode estar vazia) de objetos SoundFilter. Cada objeto subordinado possui um método para se transformar em uma sequência de argumentos para ffmpeg (por exemplo, um HighpassFilter se transforma em {"--highpass", "200"} ou qualquer outra coisa). A classe de tarefa pode então construir facilmente uma linha de comando a partir de seus subordinados. Você precisa escrever uma turma por opção, mas você pode elevar o código comum para uma superclasse; cada subclasse deve ser bem simples.
Isso envolve mais clichês do que uma abordagem de oposta inversa, mas você compra segurança de digitação. Além disso, fornece um local onde você pode começar a suspender mais funcionalidades: pode colocar validação ou cálculo nos objetos de filtro ou compor várias opções em um único filtro mais sofisticado.
fonte