停止滥用外部依赖,请明智地使用它们
极客时间编辑部
讲述:初明明大小:3.64M时长:03:58
你好,欢迎收听极客视点。
假设你想使用你最喜欢的编程语言为你的系统构建一个代理服务器,你该怎么办?首先选择自己比较熟悉的 Web 框架,这样就有了一个项目脚手架,然后就可以直接开始实现了。完成这个简单的步骤后,你就可以启动服务器并立即接收 HTTP 请求。在服务器中,你希望根据请求的源地址和内容体对请求进行身份验证和流量过滤,因此,除了 Web 服务器框架之外,你还得选择并安装一个中间件来处理身份验证,以及一个库来简化新请求的处理和过滤。
或许你不希望重复造轮子,使用了一些胶水代码将所有这些部分粘结在一起,然后做一些单元和集成测试,检查一切是否正常,然后就可以开始下一步的工作了。
而这样做的问题你也很清楚,项目 80% 的代码都是别人的,来自项目使用的外部库,只有 20% 的代码是自己的,你自己的代码是作为胶水和粗略的定制,使你的用例可以使用那些库。但最终构建出来的系统健壮吗?有弹性吗?能长久吗?
工程师阿方索·德拉罗沙(Alfonso de la Rocha)认为,如果想把软件工程视为一种工程实践(它值得),就需要开始构建健壮的、有弹性的和长久的系统,并且不要草率地在项目中加入任何你偶然遇到的代码片段。对于外部依赖,应该“明智地使用它们”,不要使用你发现的第一个“有效”的库,应该花一些时间研究可选方案,从而选择一个更符合你需求的,甚至完全放弃使用库,自己编写代码来完成这项任务。
为什么尽量避免过度使用外部依赖呢?阿方索·德拉罗沙认为,至少你应该知道使用库存在如下这些风险。
第一,你使用的库和外部依赖可能已经过时、缺少维护,或者存在隐藏的安全缺陷和性能瓶颈。当你是代码的所有者时,你知道自己在做什么,但是当你使用其他地方的代码时,你不知道开发人员是否犯了错误(如果你不阅读和理解你添加到项目中的代码)。你不知道他是否使用了低效的实现,或者如果你不检查源代码,也不知道他是否添加了恶意代码。更重要的是,如果开发者放弃了这个库,而你在未来的系统中还需要依赖它,那该怎么办?那就需要你了解所使用的代码。
攻击者经常使用社会化工程将他们的包放入应用程序中。他们创建一个具有有用特性的包,然后偷偷加入一些恶意代码。一旦代码进入应用程序,用户启动应用程序时,这些代码就会攻击用户,相应的案例非常多。
第二,库会显著增加代码的大小和编译时间。你可能会遇到这样的场景:你包含一个完整的库来执行某项任务,但最终使用的是整个库的一个函数。或者,在 package.json 中有些依赖项,你在开发和试验解决方案时用到了但最后忘了清理,这些都会给你的任务带来麻烦。
第三,库可能会向你隐瞒解决方案中的许多权衡、设计决策和潜在的故障点。与信任各种外部依赖项相比,在系统所有的基本代码都由你完全设计并实现时,识别潜在的攻击媒介要容易得多。
第四,在系统中不使用任何库是一种挑战和乐趣。你可以试着这样设计一次,你会看到在这个过程中你学到了多少东西,如何更好地掌握和理解你所选择的编程语言,以及完全控制你的系统,这会给你带来新的感受。
总之,更新一个库不应该破坏你的系统,而考虑到它们应该能够在自然环境中运行数年,不需要任何外部管理或维护,一个软件应该尽可能地按照设计桥梁的方式来设计。
原文链接:为什么要设计出具有“永久性”的软件?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论