提示我的问题是Jeff Atwood的这篇文章和 Dare Obasanjo 的这篇文章。在我看来,至少在某些领域,第三方功能比自定义代码更好。
例如,日志记录应该始终是第三方的吗?加密呢?还是搜索?
我期待大家对此的反馈。
编辑:这个问题假设日志记录、加密和/或搜索不是您的核心业务。
提示我的问题是Jeff Atwood的这篇文章和 Dare Obasanjo 的这篇文章。在我看来,至少在某些领域,第三方功能比自定义代码更好。
例如,日志记录应该始终是第三方的吗?加密呢?还是搜索?
我期待大家对此的反馈。
编辑:这个问题假设日志记录、加密和/或搜索不是您的核心业务。
大多数情况下,加密应该是第三方,...除非您从事销售加密系统的业务。
据我了解,这几乎是阿特伍德先生的观点,您的核心业务不应该是第三方,所以可能没有什么应该永远是第三方......
我的经验法则是使用(或至少考虑)第三方来处理您业务核心目的之外的任何事情。
加密一直是这方面的典型例子。但它也延伸到其他领域。
在开发过程中编写用于故障排除的日志代码与编写用于监控生产系统的日志代码完全不同。
这一切都是关于选择哪些开发领域真正为您的项目增加价值。使用第三方的东西消除了该组件不完整/错误/等的风险。但随之而来的风险是它可能不像您需要的那样灵活。
另一个例子是为网站开发一个完整的网络论坛,此时您可以以更便宜的价格购买解决方案。
“什么功能应该始终是第三方的?”
没有任何。在讨论本质上的工程决策时,总会有例外或特殊情况来否决“总是”的过分使用。
此外,几乎不应该根据给定的“功能”做出选择第三方的决定。没有像这样完美的库这样的东西,你永远不需要去其他任何地方来获得这种类型的功能。
去第三方是一个应该基于做出的决定
然而。有些事情真的很难相信在家里会更好。例如,您可以编写 OpenGL 和 DirectX 的竞争对手,并且在某些应用程序(科学计算等)中,有充分的理由考虑这样的路径。但总的来说,你不会梦想它。尽管它是“免费的”,但它仍然是第三方依赖项,并且您可能会因为一个只会影响您如何使用这些图形语言的错误而陷入困境。
换句话说,存在一些非常复杂或难以证明/测试的东西,它们几乎总是应该交给第三方。安全是另一回事。不要编写自己的哈希算法,除非您 1) 可以证明是疯狂的并且 2) 至少有 3 个出色的商业理由这样做。
但是“什么功能应该始终是第三方的?” 没有任何。总是有例外。
-亚当
我完全同意加密只能由专家在可能的情况下进行。它也应该是开源的,并且经过了大量的同行评审。
这取决于。是否有适合您需求的第三方库,最重要的是,您使用的语言和/或 API。然后去吧。
如果您有理由制作自己的版本,请确保它不仅仅是“不是在这里发明的”。此外,如果您还没有深入了解市场前五名的领先产品以满足您的需求,那么您的工作做得不够彻底。很有可能你会找到你要找的东西,即使你不能使用它,你仍然可以从图书馆的描述中学到一些东西。至少,您将了解哪些功能需要,哪些不需要。如果您还获得了其中一个库的源代码,那么与没有源代码但可能具有更多功能的竞争库相比,这应该是您的首选。
我一直使用第三方控件的领域是图表。必须绘制一批数据并且第三方控件成熟且值得信赖,这是一个相当普遍的问题。
我想答案取决于使用情况。如果您是为了盈利而开发,如果使用组件的成本与开发成本相比,您可能会购买组件以获得更多利润。当您没有内部专业知识来生产大型组件时,尤其如此。
我使用的几个很好的例子是 Infragistics 控件和 Dundas 图表。尽管我们可以在内部创建这些,但与购买几个许可证相比,时间和机会损失方面的成本将是巨大的。
当然,有时我们做这种事情甚至没有考虑将其视为组件购买。稍微扩展一下想象力,您可以包括 .NET 框架、SQL Server、Windows API 等。
如果您能以比构建它更便宜的价格购买它,并且购买的功能满足您的业务需求,那么就购买它。
这个问题没有明确的答案,因为就像软件开发中的其他任何事情一样,它取决于情况。我会说,如果以下 3 项是真的,那么你不应该考虑自己做......
这个问题是问题的反面:你应该创建什么软件?
这显然是愚蠢的。
两者都没有一个答案,这取决于您的业务需求。您是否需要为整个互联网构建更好的搜索引擎?几乎可以肯定不是。但如果你是 90 年代后期的谷歌,你就知道了。第 3 方与第 1 方只是您在哪个办公室工作的问题,每个第 3 方都是他们自己的第 1 方。
要么你会创造出质量较低的东西,要么你会在无关紧要的东西上浪费金钱和精力,或者两者兼而有之。
如果您可以建立更好的东西,并且可以从更好的东西中建立业务,那就去做吧!
不要忘记,手工编写所有东西的时间是一个大问题,并不是你不能这样做,而是问题来自你的客户或公司,他们总是想找到最快的方式来构建他们的系统。但是,如果您有一个非营利项目,您可以尝试自己构建东西。例如,如果您正在编写 Web 应用程序并且想要设置一些 ajax 功能,您可以使用 JQuery 或 Dojo 作为您的 ajax 工具包,手动构建这些东西需要时间 :)
但是你在使用第三方库时也必须小心,你必须信任它们,因为它们可能包含恶意代码,或者它们写得非常糟糕,会让你头疼。
你自己的加密功能?甚至不考虑它,但我认为您可能是指现有功能的某种包装器。
第 3 方组件优势: 大量功能
完全测试(希望如此!)
不需要时间开发,因此可以更便宜(但是..)
缺点
它是否真的足够灵活,可以满足下一个不公平的客户需求
分发可能很昂贵 将
您与第 3 方公司联系在一起,当他们发布新版本来修复错误时,这可能会很痛苦
您没有学会自己完成任务
您是否使用第三方组件将取决于您的应用程序和要求。像图形这样的东西需要很长时间才能正确,所以它是一个很好的第三方组件。
您的核心业务之外的任何东西都是第三方解决方案的良好候选者。您希望将开发时间花费在创建独特(ish)并且无法以具有成本效益的庄园购买和使用的核心功能上。
例如,让我们看一下 web gridview 控件。您可以自己开发和扩展网格视图吗?当然可以,但是开发、编码和测试网格视图将花费 X 量的时间和资源,您可以将其转化为美元。现在,您已经考虑了支持、维护和错误修复的重复成本。
现在让我们使用我记得在一些杂志上读到的关于美国开发人员平均每小时赚 40 美元的任意金额,包括他们的收益。每个开发人员许可证大约需要另外 800 美元才能获得完整的 Web 控制套件。如果您的开发人员在这个控件上总共花费了超过 25 个小时,那么您可能已经购买了一整套套件并花费 5 个小时进行集成和测试。
现在希望我在那里没有太困惑,但一般的要点是,如果你可以从自己身上购买它,它可能会节省时间和金钱,而是专注于你无法摆脱自我的事情,这些事情通常是你的钱制造商。
我想说编写样板代码或几乎每次都复制和粘贴的冗余代码应该通过库来完成。对我来说,验证代码几乎总是让我犯愚蠢的错误,因为它很无聊。Spring.NET 在这方面非常棒。我很高兴我的老板鼓励我尝试一下。
似乎你有你需要的所有答案,但我只想和其他人一起在这里发表我的意见。客户付钱让您制作专门为他们工作的应用程序,这通常是他们找您的原因;他们需要的东西在市场上的任何其他产品中都找不到。因此,您的重点应该是开发他们需要的特定部分。
毫无疑问,您的应用程序还需要做其他事情。也许它需要连接到数据库,或加密某些行。这就是第三方库发挥作用的地方。您不想浪费时间为数据库编写新的驱动程序,或者为可能有漏洞的新加密方案编写您没有时间测试的漏洞。您想使用已经存在并且已经过广泛测试和优化的那些。
请记住,您完成得越快,他们支付的费用就越少。这让他们很高兴并想回到你身边。这也意味着你赚得更多,因为即使他们付的钱更少,你也可以从事更多的项目,这意味着更多的钱。
总之,您应该依赖杂项模块中的第三方库。