DRY是一支步枪,记住YAGNI

2020-12-06 03:53:45

这是一个好规则。 即使没有人教您,您也可以自行解决。 "我想要一个带有Button的按钮和一个名为Click Me的按钮。 "现在我希望Button打开购物车,并希望ClickMe关闭页面。 "精彩。 漂亮的按钮。 我想要第三个按钮,这个按钮应该关闭当前打开的模式。" 您只需将代码干燥即可,这是您的第一个胜利。 按钮使用通用的基础组件。 给他们一个大字体很容易。 你有病。 工程的真正胜利。 您为设计良好的架构,清理代码而在背后轻拍自己。 您遵循了一些很棒的工程原理! 👏 下周,您的PM回来并说,"按钮必须为绿色,ClickMe应该为蓝色,CloseModal为红色"

好的,这很烦人,为什么要使用3个不同的按钮,但是您可以扩展GenericButton以接受样式。 您仍然有病。 您必须在每个GenericButton调用中添加样式,但这没关系。 至少您有一些组件,因此您不必查找每个按钮的每个调用并进行更改。 哈! 你真聪明 您编写了GenericButton,因此通过props提供的样式可以覆盖默认样式。 嗯……您的3个按钮中有2个需要新的行为。 最好将其添加到基本实现中。 为什么按钮总是自称为活跃按钮? 默认情况下,按钮应该处于活动状态,并且此功能仅对使用它的按钮存在。 您的GenericButton开始随着边缘情况而膨胀。 随着时间的流逝,情况会越来越糟。 您将添加加载状态。 但是只有一些按钮会使用它。 您将添加悬停/展开行为。 但并非所有按钮都希望那样。

最终,您将获得一个按钮,其功能如此之多,无法使用。每个渲染都需要很多道具,因此您最好从头开始编写整个按钮。

当它开始具有通用性时。我过早地概括自己开枪打脚的次数太高了

— Swizec Teller(@Swizec)2019年1月4日

YAGNI,根本不需要它,是一种编程哲学,工程师可以在生活中后期学习。

因为这些DRY脚枪可能要过一段时间才会出现。或者是因为许多项目的寿命不足以看到它。也许只是思考代码为什么会受苦。

首先是上面的。您发现了优化的机会,但为时过早。您应该避免将代码泛化,直到绝对显而易见的为止。

您拥有的用例越多,就越容易知道要推广的内容。我的意思是,如果您还没有这些组件,那么您怎么知道这些组件共享哪些功能呢?

这将我们带到另一个YAGNI:在您需要之前构建您认为需要的东西。

您想到了一个奇妙的抽象。一项很棒的小功能,将来会为您带来很大帮助。

几个月过去了。您在这里和那里调整代码。没有人使用它,但是您必须维护它,否则它会损坏。每当实现功能时,都必须考虑它如何影响您拥有的代码。

但是有一天!辉煌的一天,您的PM给您完成任务。众神的任务。您将要使用6个月前预测的代码!

您删除代码并从头开始。该功能是如此不同,以致您无法使用任何功能。

留下您的电子邮件,我会立即向您发送一个Interactive Modern JavaScript Cheatsheet。之后,您每周都会收到有关React,JavaScript和您的职业的周到电子邮件。在我20年的行业经验教训中,他们与小型初创公司到Fortune5庞然大物等公司合作。

"伙计,喜欢您的简单文字!您的邮件是我从营销人员那里收到的唯一一封电子邮件,也是我最讨厌阅读和阅读的博客。滚动到最后。哇,总是和我一起上课。并且非常相关。 👌"

您的姓名您的电子邮件地址您的加入人数超过10,000,就像您已经通过我的来信,讲习班,课程和讲座改善了他们的职业一样。 ✌️

您有一个急切的问题您认为我可以回答?我没有所有答案,但是我有一些答案!在Twitter上打我,或预定30分钟的妈妈以获取深入帮助。

准备停止复制粘贴D3示例并创建自己的数据可视化了吗?了解如何构建整个团队可以使用React for Data Visualization理解的可扩展dataviz组件

对无服务器和现代后端感到好奇吗?请查阅无服务器手册,这是前端工程师的最新后端。

准备好学习如何将它们组合在一起并从头开始构建现代的Web应用程序?学习如何启动Web应用程序并使用ServerlessReact.Dev使您的第一本产品成为可能

是否想重新使用现代JavaScript语法?查看我的交互式备忘单:es6cheatsheet.com

顺便说一句,以防万一今天还没有人告诉你:我爱你并感谢你,因为你是你❤️