我有一个“管道”式的过程,该过程实质上只是将一堆现有工具链接在一起以使工作流自动化。对于其中一个步骤,有一个现有的命令行工具已经可以完成该步骤需要执行的操作。
外部CLI工具是基于Java的,我的管道也是基于管道的,因此可以将工具直接集成到管道步骤中,但是该工具非常复杂,目前与具有命令行输入密切相关(例如37个配置标志选项)。
问题是:简单地调用并调用外部过程是一个更好的主意,还是将外部代码集成到我的应用程序中会更好?
集成与调用外部过程的利弊是什么?
我有一个“管道”式的过程,该过程实质上只是将一堆现有工具链接在一起以使工作流自动化。对于其中一个步骤,有一个现有的命令行工具已经可以完成该步骤需要执行的操作。
外部CLI工具是基于Java的,我的管道也是基于管道的,因此可以将工具直接集成到管道步骤中,但是该工具非常复杂,目前与具有命令行输入密切相关(例如37个配置标志选项)。
问题是:简单地调用并调用外部过程是一个更好的主意,还是将外部代码集成到我的应用程序中会更好?
集成与调用外部过程的利弊是什么?
Answers:
简单地调用并调用外部过程是一个更好的主意,还是将外部代码集成到我的应用程序中会更好?
这是很多更好的整合这些东西。
命令行界面只是一个界面,而且是一个非常糟糕的界面。这是必不可少的,但同时也充满了不明智的怪癖和局限性。
每个“使工作流程自动化的现有工具” 都应该有一个整洁的类,该类在解析了命令行选项之后才能完成实际工作。
理想情况下,public static void main
函数在每个“现有工具”中都做两件事。
它调用一些命令行选项/参数解析器。
它调用完成实际工作的整洁类。考虑一下在Ant或Maven处理完所有解析和决策之后执行实际工作的Ant任务或Maven任务。
当您整合这些东西时,您需要做真正工作的整洁的类。
如果它们不存在,那么您将不得不重写所有这些工具,以创建能够完成实际工作的整洁类,而与所有命令行解析分开。
有关如何使这些整洁的类工作的指南,请阅读Ant(或Maven)以了解它们如何定义各种辅助任务。这是一个很好的思维模型,用于说明如何将多种不同的事物集成在一起而无需返回命令行。
main
方法,CLI分析方法等。这很讨厌:(
我想说,如果可行的话,别管它。
作为程序员,您可以通过解决软件问题为组织带来价值。在给定的时间内解决质量和数量上更多的问题与您在组织中的价值直接相关。花时间创建代码会减少您的价值,因为它使您无法解决更重要的问题。
但是,可能会减少花费时间的几个因素是可伸缩性,以及是否需要考虑外部程序的稳定性。
它不是“更好”或“更糟”。成本和收益是完全不同的。
集成点的数量越多,编写和维护软件的成本就越高,从而增加了复杂性。
请注意,这些是集成成本,您必须权衡总成本,其中总成本包括编写和维护软件的成本。
您可能是一个非常缺乏经验的程序员,但却是长期的高级用户。
找出的最佳方法:
调用外部命令行应用程序或内部化该应用程序的逻辑是更好的主意吗?
是为您自己计算费用。对于不同的环境,情况和人员,成本将有所不同。在大多数情况下,调出命令行会花费更多,但并非总是如此,这是确保执行分析的唯一方法。