J'ai une sorte de processus «pipeline» qui consiste essentiellement à relier un ensemble d'outils existants pour automatiser un flux de travail. Pour l'une des étapes, il existe un outil de ligne de commande existant qui fait déjà l'essentiel de ce que cette étape doit faire.
L'outil CLI externe est basé sur java, tout comme mon pipeline, il serait donc possible d'intégrer l'outil directement dans l'étape du pipeline, mais l'outil est très complexe et est actuellement étroitement lié à la saisie en ligne de commande (quelque chose comme 37 options de drapeau de configuration).
La question est: est-ce une meilleure idée d'appeler et d'appeler simplement le processus externe, ou serait-il préférable d'intégrer le code externe dans mon application?
Quels sont les avantages / inconvénients de l'intégration par rapport à l'appel du processus externe?
la source
Réponses:
Il est beaucoup mieux d'intégrer ces choses.
L'interface de ligne de commande n'est qu'une interface, et particulièrement horrible. C'est essentiel, mais il est également rempli de bizarreries et de limitations qui ne sont pas raisonnables.
Chacun des "outils existants pour automatiser un flux de travail" devrait avoir une classe bien rangée qui fait le vrai travail après l'analyse des options de ligne de commande.
Idéalement, la
public static void main
fonction fait deux choses dans chacun de ces "outils existants".Il appelle un analyseur d'options / arguments en ligne de commande.
Il appelle la classe ordonnée qui fait le vrai travail. Pensez à une tâche Ant ou à une tâche Maven qui fait le vrai travail après que Ant ou Maven a géré l'ensemble de l'analyse et de la prise de décision.
Lorsque vous allez intégrer ces choses, vous voulez les classes bien rangées qui font le vrai travail.
S'ils n'existent pas, vous devrez réécrire tous ces outils pour créer la classe bien rangée qui fait le vrai travail, séparée de toute analyse en ligne de commande.
Pour des conseils sur le fonctionnement de ces classes bien rangées, lisez Ant (ou Maven) pour voir comment elles définissent les différentes tâches de travail. C'est un bon modèle mental pour la façon dont plusieurs choses disparates sont intégrées sans revenir à la ligne de commande.
la source
main
méthode, les méthodes d'analyse CLI, etc. C'est plutôt désagréable :(Je dirais de le laisser tranquille si ça marche.
En tant que programmeur, vous apportez de la valeur à votre organisation en résolvant les problèmes avec les logiciels. Résoudre plus de problèmes de qualité et de quantité dans un laps de temps donné est directement lié à votre valeur dans l'organisation. Passer ce temps à créer du code diminue votre valeur car cela vous éloigne de la résolution d'un problème plus important.
Cependant, deux ou trois facteurs qui pourraient atténuer le temps passé seraient l’évolutivité et s’il y avait des problèmes pour la stabilité des programmes externes.
la source
Ce n'est ni "meilleur" ni "pire". Il y a simplement des coûts et des avantages différents.
L'écriture et la maintenance d'un logiciel sont souvent plus coûteuses, plus le nombre de points d'intégration augmente la complexité.
Notez que ce sont des coûts d'intégration que vous devez comparer avec le coût total qui comprend entre autres le coût d'écriture et de maintenance du logiciel.
Il se peut que vous soyez un programmeur très inexpérimenté, mais un utilisateur expérimenté de longue date.
La meilleure façon de comprendre:
Est de calculer les coûts par vous-même. Le coût sera différent pour différents environnements, situations et personnes. La plupart du temps, il vous en coûtera plus cher d'appeler la ligne de commande, mais pas toujours et le seul moyen d'être sûr de faire l'analyse.
la source
Idéalement, vous voudriez l'intégrer. Surtout s'il s'agit d'une application qui est distribuée - la réduction du nombre de dépendances et de configurations facilitera cela. Mais c'est bien sûr un problème de coût / bénéfice pour votre cas spécifique.
Cela dit, une chose à considérer est la stabilité. J'ai rencontré quelque chose de similaire il y a quelques années et j'ai maintenu le programme cli en place. C'était trop instable, et je ne voulais pas que son plantage supprime l'application parente, qui devait fonctionner 24h / 24 et 7j / 7. Maintenant, ce n'était pas une application java, mais néanmoins, si c'est un problème qui peut s'appliquer, vous voudrez peut-être garder cela à l'esprit.
la source