软件存在为某人提供价值。通常给我们的客户或雇主。作为开发人员,我们获得了最大程度地提高该价值的最大形式的构建软件。
作为专业人员,我们试图使我们的代码在将来易于维护和改进。为此,我们使用的设计模式本质上是针对常规问题的经过验证的解决方案,这些解决方案是在构建软件时做出决策的指南。
muchas veces los los conococia conococia rags of mini短语,slam³ganes,因为 不要重复自己 , 不要重塑车轮 , kep它简单,愚蠢 , sharsthince ,y varias otras 。
所有这些都有一点,但是我想从其中两个短语开始: dry 和 不要重新发明车轮< /em> 。
干燥
干燥,不重复自己,是一个众所周知的软件设计原则。总体上的想法是,应该避免重复代码,因为它使其很难随着其增长而保持软件。
libic是有道理的,如果我们进行双重编码,更改或修复时,则必须记住要在使用的所有地方修复它,并且这些位置中的每个地方都可能具有不同的行为。这需要几个问题:
- 您可能会忘记在一个重复的地方进行更改。
- 可能,您将需要时间在重复的所有地方进行申请(并尝试)。
- 应用更改时,您在不同的情况下以相同的方式应用它或不同的预期行为。
- 链接到上一个,可能并不是立即显而易见的是两个代码做同样的代码,但在不同的地方。
好吧,您会出售您,但是要干燥,以避免重复代码。那是什么问题?
好吧,没有太多谈论的是,应用干燥(通常是关于设计模式的应用),需要一系列缺点:
问题1-耦合
当您的经理,产品设备或UX决定您进行的35个输入中时,会发生什么,他们想要一个(特别是一个),特别是一个(尤其是一个)?
是的,干燥代码通常是更耦合的代码。这可以解决吗?当然!我们可以在任何地方添加IF,或实施其他模式以整洁地解决,但总是以更复杂的方式牺牲。
代码在统一中不能独立发展,通常是整个或全无。
问题2-复杂性和时间
在特定情况下,您要花多长时间才能制作一个基因组件?我不冒险说考虑更多案件的Gené花费您更多的时间。
制造基因组件,导致使组件更具用途。在大多数情况下,这是要考虑的案件的特定案例。
复杂性的增加不仅会影响最初的发展时间,而且会影响组件的难度:
给出添加额外验证的初级任务
和sã,确保整个公司使用的Gení©Rico的生成器运行良好,但是如果有必要,并且在Violeta中,他将需要很长时间。
复杂性是一个略有不同的解释概念。出于实际目的,假设是每分钟他妈的的速度使您能够阅读一件代码。
提高软件作品的复杂性,意味着在理解并能够维护一块代码时,增加了团队中新开发人员(或初级/半元素)的难度曲线。这不是一件小事,因为再次:我们获得了维护和改进的代码。
让我们更改口号,然后才能给我一些东西。我将在最后返回此主题。
不要重塑轮子
如果我们服用干并将其应用于整个软件开发生态系统?不要重新发明轮子(不要重塑车轮)是另一个通常听到的口号,它与前一个相关。
的想法是,作为开发人员,考虑到我们的工作意味着生产为客户产生价值的软件,我们不应该尝试从头开始做所有事情,而是重复使用我们可以代码的地方。
与干燥非常相似,但是有其他代码,?
现实是,由于这个赞助人,网络开发行业部分增长。从一开始就在巨人的肩膀上构建了网络。没有开源,以及NPM和节点给我们的应用程序生态系统,网络将不是今天的。
原因很简单:金钱和时间
对于一家新兴公司而言,想法和MVP之间的时间可能会变得非常臭,以及吸引大量,低调的观众的成本。
使用WordPress,Wix,Squarespace或Shopify等工具和产品,公司可以以非常便宜的方式在短时间内筹集一个项目,如果我们去我们的框架和书店,我们使用摘要摘要意味着应用程序的复杂性,减少了今天做某事所需的时间和精力。
不仅如此,而且当代码被更多人进行测试,审查和改进时,它通常会改善。
反应和角度比几年前更好,因为他们对他们感兴趣,这对代码审查,错误报告,用例,优化,时间,银色有贡献。
这使质量,性能和安全性提高了。
,但归根结底,这种方法也有问题:
问题1-这是纸杯蛋糕
我们所依赖的库通常为许多使用案例提供了空间,以至于我们要做的更多tree-shaking,运行的代码不是最后一个,这不是正确的工具。我们正在向用户发送大量JavaScript,主要是包括我们不需要的库和代码,而不是真正的。
简单地说,因为该代码做了太多事情。 Y el problema se va agravando año a año。
这是去年平均三年来的JavaScript Kilobytes的数量。
这个数字应该下降!导航员的API变得越来越易于使用,我们正在创建消除死亡代码的工具,但是趋势仍在上升,我们继续越来越多地起床。
问题2-供应链攻击(供应链攻击)
不仅我们的软件最终会变得更慢,而且还可以更安全。这些依赖项在我们的计算机以及客户和用户的计算机上打开了新的攻击向量。
翻译:到达:Toda现代数字基础架构。
下图:自2003年以来一直维持的任何疯子的项目。
我们有时不考虑,在计算机上执行NPM安装(或其当量)时,我们信任其他程序员。依赖项安装过程允许随机范围的随机软件。而且,每次看起来越来越多的恶意软件都达到NPM。
每次发生更多的事情,恶意(或受打扰的)人们打破了我们的应用程序或库,因为一切都取决于一切,即使有理由这样做,一切都不是为了重塑轮子。
,如果他们不相信我,我会告诉您一些真实案例:
- OpenSSL负责在数百万个服务器中签署数亿用户的请求和响应。尽管如此,它仅由HobbyNomãs的4位开发人员维护。出现了一个安全漏洞,花了3年的时间才意识到攻击者很容易获得许多机密信息。
- 在另一种情况下,完成了250个NPM软件包的开发人员决定将它们全部摆脱记录。打破了成千上万的应用程序和图书馆。 NPM在其历史上首次重新出版了由其创建者擦除的包装。这不是最后一次发生。
// Esto es, literalmente, toda la librería leftpad.
// Solo le agrega caracteres a un string
module.exports = leftpad;
function leftpad (str, len, ch) {
str = String(str);
var i = -1;
if (!ch && ch !== 0) ch = ' ';
len = len - str.length;
while (++i < len) {
str = ch + str;
}
return str;
}
- 还有一个主题,其中一个非常受欢迎的依赖/插件开始将恶意软件放在许多开发人员的PC上。 NPM安装过程下载了一个文本文件,该文件基本上是执行后的病毒。
问题3-不了解轮子的工作方式
我立刻看到了那些没有过滤数组的人,整个数组的过滤lodash导入。作为专业人士的迟到,害怕重新发明轮子也意味着我们没有激励措施了解其有效的作用。甚至要学习nommit。
澄清湿和零DEPS
在他们给我扔东西之前,我会提到在干燥之前,湿了,这总是建议在抽象之前至少写两次代码,以便为计划抽象和简化的内容提供更好的图像。这是我更喜欢的一种方法,但我也不会继续盲目。
在没有重塑轮子的前面,有一些图书馆夸耀没有依赖性,因此,它们不受供应链的攻击,但这并不意味着那些相同的图书馆不会成为那些相同的库有安全问题或其他问题。
结论
解决方案不是一种方法,也不是其他100%的时间。 没有银子弹。 总是有反对,尽管这是我们开发的应用的复杂性的提高。
其应用的净结果通常是积极的,尤其是对于初级程序员而言,因为它们是不确定性的指南。对于叙述的人来说,遵循盲目的赞助人是在黑暗中前进的更好选择。
但是重要的是不要对此进行教条。
随着我们的职业发展,我们必须开始考虑我们的实践所具有的弊端,以镊子和务实的方式进行事情,并考虑到可能出现的问题,做出明智的决定,并为可能的后果做好准备。
这让我感兴趣的是,当他们看到其中一个草图时,他们会想到 ,但是为什么?打破它? *
仅此而已。运气! ðÖ»
如果您想阅读更多,并且知道英语,则有一些有趣的文章:
- The Fallacy of Dry.
- Moist Code y AHA programming
- The Hidden cost of don’t reinvent the wheel
- javascript 1 y 2的成本。
- When to Reinvent the Wheel.
- When it’s okay to reinvent the wheel
- 10 Useles NPM packages with million
lasimamênas的骨骼:
Lukas Tennie,Ante Hamersmit,Jeppe Hove Jensen y XKCD Infraestructure comic