问题标签 [dry]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1085 浏览

python - Python optparse 默认值与函数默认值

我正在编写一个 python 脚本,我希望它既可以从命令行调用,也可以作为库函数导入。理想情况下,命令行选项和函数应该使用同一组默认值。让我在两个地方重用一组默认值的最佳方法是什么?

这是具有重复默认值的当前代码。

0 投票
2 回答
9477 浏览

python - Django - 在设置中使用反向 url 映射

django 设置文件中的一些选项是 url,例如LOGIN_URLLOGIN_REDIRECT_URL. 是否可以避免对这些 url 进行硬编码,而是使用反向 url 映射?目前,这确实是我发现自己在多个地方编写相同网址的唯一地方。

0 投票
8 回答
1183 浏览

ruby-on-rails - 何时停止干燥代码?

所以干掉代码应该是件好事吧?在我正在从事的一个项目中,存在某些模型/实体或多或少相同的情况,除了使用它们的上下文。也就是说,每个这样的实体都有一个标题、描述、标签、一个 user_id 等和一些其他属性。因此,他们在各自控制器中的 CRUD 操作看起来非常相似。

我的经理争辩说它重复了代码,需要干掉。因此,他提出了 CRUD ruby​​ 模块,当included 负责所有这些实体的控制器的 CRUD 操作时。但最终,Simplicity 受到了损害。代码失去了可读性,因为每个“事物”都被命名为“对象”。调试变得困难,干掉代码的全部意义就丢失了。

这只是一个案例。其中有几个 DRYing 会导致复杂、难以调试的代码。所以问题是,我们什么时候停止干燥代码?因为并非每次您都意识到代码已经失去了简单性(而且代码作者通常从未意识到代码的简单性已经失去了)。此外,如果我们必须在简单性和 DRYed 代码之间进行选择,应该选择什么,如果有一种情况,您只能获得其中任何一个。

0 投票
12 回答
1213 浏览

c++ - DRY 与“避免宏”

我正在使用 Windows API 在 C++ 中创建自己的 XUL 实现。元素由 XML 解析器构造的事实要求它们具有相同的接口,这样我们就不需要为每个元素构造函数编写自定义代码。结果是我的大部分元素看起来像这样:

所以这里有很多代码重复。我想知道用这样的宏调用替换它们是否是个好主意:

我还没有完全弄清楚这个概念,所以这里缺少一些东西,比如类定义,以及(也许)为每个元素添加方法的能力。

但我想知道您对在这种情况下使用宏的看法。随时分享您的想法。

编辑

我现在正在使用一个小的 ruby​​ 脚本,它从一组模板生成源文件和头文件。我增强了脚本,以便文件也自动标记为在 SVN 上添加,并且修改了 Visual Studio 项目文件以包含这些文件。这为我节省了大量的体力劳动。我对这个解决方案很满意。仅供参考,这就是模板现在的样子:

CPP文件:

0 投票
3 回答
1547 浏览

java - 如何将参数指定为每个 Web 服务调用的一部分?

目前,我们应用程序的每个 Web 服务都有一个为每个方法添加的用户参数。例如:

一个服务中可能有二十个方法,每个方法的第一个参数都是用户。并且可能有二十个网络服务。

我们实际上并没有在实现中使用“用户”参数——事实上,我不知道它为什么存在——但我没有参与设计,把它放在那里的人是有原因的(我希望)。

无论如何,我正试图理顺这个大泥球。

通过使用 Spring 代理包装 Web 服务,我已经取得了长足的进步,它允许我在拦截器中进行一些前后处理(在每个方法至少有 20 行复制粘贴的样板代码之前)。

我想知道是否有某种“消息头”可以应用于方法或包,并且可以由某种类型的处理程序或每个 Web 服务方法之外的东西访问。

提前感谢您的建议,LES

0 投票
4 回答
850 浏览

javascript - Jquery - (重新)连接动态生成的元素

很多时候,我的元素与附加功能挂钩,例如:

但是当通过一些代码动态生成这个类的更多实例时,新$('.myfav')的已经死了,需要重新布线,所以我这样做:

这意味着我最终拥有 2 个相同的代码块,1 个用于初始页面加载,另一个用于重新连接动态生成的新元素。这不是 DRY 代码,效率不高。

这真的是完成这项工作的唯一方法,还是有其他最佳实践?我的直觉告诉我必须有比这更有效的东西(也有助于 DRY 代码)。

更新

看起来 .live 与 .click 配合得很好,正如 cletus 所解释的那样。

但我尝试使用自定义设置插件,如 .autocomplete,但没有成功。我试过这个:

所以 live 看起来不能处理这些自定义插件(当然我可能是错的,如果你知道的话请更新)

0 投票
1 回答
173 浏览

excel - Excel:如何进行 DRY 格式化?

我有一些条件格式样式。我不想继续为新范围创建新规则;我宁愿遵循 DRY 声明一次并在其他地方引用它。我很难做到这一点。

当它只有一个范围时,条件格式规则可以正常工作。

=Travel!$C$5:$P$8

但是,然后我尝试在另一张纸上添加另一个范围,但它失败了。

=Travel!$C$5:$P$8,Equipment!$B$5:$H$11

当我单击“应用”时,电子表格上没有任何反应,相关规则的范围将自行重置为:

=Travel!$C$5:$P$8

有没有办法做到这一点?

0 投票
4 回答
276 浏览

ruby-on-rails - 如何干燥这段 Ruby 代码?

这让我很困扰。它看起来不太干。什么是更好的实施方式?顺便说一句,为什么这个 ActiveRecord 查找器在找不到记录时不抛出异常,但是 .find 呢?

0 投票
2 回答
146 浏览

security - 如何防止业务逻辑的重复?

好的。所以这是我的简化方案。我们有一个系统可以处理许多客户的订单。我们希望员工用户能够查看所有订单,我们希望客户用户只能查看与其相关的订单。

当尝试查看特定记录时,我们在 OrderSecurity 类中使​​用以下函数:

当我们想要向用户显示订单列表时,我们可以在 OrderService 类中定义以下函数

这对上述情况来说是可以的,但随着规则变得更加复杂,这并不能很好地维持。比如说,我们添加了另一种用户类型,它代表了一个不太受信任的员工,他只能查看来自客户子集的订单。然后,我们必须向 CanViewOrder 和 GetOrders 函数(可能在数据访问类中)添加逻辑,这在我看来违反了 DRY 原则。

所以,我的问题是:我是否在这里遗漏了一个技巧 - 是否有某种方法可以组合业务逻辑以获得在一个地方查看订单的权限,这两个功能都可以使用?

还是我太担心了,应该继续前进,在两个地方都有逻辑?

(在这个特定的应用程序中,我使用的是 ASP Classic - 不要讨厌播放器,讨厌游戏 - 但我会对你如何用任何语言解决这个问题感兴趣)

0 投票
5 回答
492 浏览

c++ - 有没有一种避免 C++ 中方法原型重复的好方法?

大多数 C++ 类方法签名通常在头文件中的声明和我已阅读的代码中的源文件中的定义之间重复。我发现这种重复是不可取的,并且以这种方式编写的代码存在引用局部性差的问题。例如,源文件中的方法经常引用头文件中声明的实例变量;你最终不得不在阅读代码时不断地在头文件和源文件之间切换。

有人会推荐一种避免这样做的方法吗?或者,我主要是因为不以通常的方式做事而使有经验的 C++ 程序员感到困惑吗?

另请参阅问题 538255 C++ 代码在头文件中,有人被告知所有内容都应该放在头文件中。