问题标签 [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 回答
144 浏览

language-agnostic - 在 Web 应用程序中保持下拉列表 DRY

我正在为各种表格等编写 CMS,我发现我正在创建很多下拉菜单。我真的不想用大量随机键/字符串值表来破坏我的数据库,以便使用 2-4 个很少更改的简单下拉列表。你如何以负责任的方式管理这件事?

这与语言无关,但如果有人有具体建议,我正在 Rails 中工作。

0 投票
3 回答
267 浏览

mysql - DRY 和类似的查询

在一个特定的应用程序上工作,我一次又一次地编写非常相似的查询。它们并不完全相同,但形式非常相似,并且嵌入在几乎相同的代码块中,例如

后来,在其他地方......

...然后另一个,在其他地方另一个...等等。

这真的违反了 DRY 吗?编写一个类来执行这种查询(使用构造函数参数或表、列、绑定变量等的设置器)然后在我的整个应用程序中重用它似乎没有意义。但与此同时,我无法摆脱这种我在重复自己的唠叨感。

也许只是写一个简单的查询的方法只有这么多,并且像这样的一定数量的重复是可以预料的。

想法?

0 投票
4 回答
1701 浏览

.net - 循环依赖与 DRY

我正在设计一个可重用的类库,其中包含 2 个名为 core.xml.dll 和 core.string.dll 的程序集(其中包括)。

xml 程序集引用字符串程序集,以便使用一些字符串辅助方法。

但是,现在有一个字符串方法可以从使用 xml 程序集中包含的方法中受益。

如果我从字符串程序集引用 xml 程序集,我将创建一个循环依赖项,并且将无法从源代码构建这两个程序集。(即鸡和蛋的问题)。

为了遵循“不要重复自己”的原则,我想避免在两个程序集中重复功能。如果我在实现中发现错误,我只想在一个地方修复它。

虽然我可以将程序集合并为一个,但这并不理想,因为它会降低程序集的凝聚力。

我需要重新构建和重新部署整个程序集,只是为了对特定类进行小改动。此外,最终,由于依赖关系如此之多,我最终可能会得到一个巨大的库程序集。

那么在一组可重用的库程序集的上下文中,在这里使用的最佳方法是什么?另外,.NET 框架本身是如何处理这个问题的?

(在 Reflector 中,System.Configuration.dll 似乎引用了 System.XML.DLL,反之亦然。这实际上是否正确,如果是这样,如何管理循环依赖关系?)

0 投票
4 回答
885 浏览

wpf - 避免 WPF 中的重复(遵循 DRY)

考虑以下 2 个 XAML 片段(在文件中并排显示):

如何删除 WPF 中的重复项?这种类型的按钮我有大约 4 次使用(此处显示 2 次),它们的 80% 相同,如果不是更多的话。我可以将其提取到用户控件中并在其上放置一些 DP,然后我将拥有一个控件,但我担心我会开始在我的代码库中乱扔大量用户控件(我有很多“一次性"这样的情况)。我不喜欢这里的 DataTemplate 解决方案,因为我仍然需要两个模板,这将有重复的代码。在不创建一堆模板/控件的情况下,有没有办法让这段代码遵循 DRY?

0 投票
3 回答
639 浏览

c# - 如何在 ASP.NET MVC 中使用 DRY 原则重构此代码?

我的一个控制器中有几种方法可以做到这一点:

这是 LoadCustomers(),但 LoadEmployees、LoadStatuses 和所有其他的逻辑几乎完全相同:

如何更好地编写此代码,以便每次添加新选择列表时都不需要新方法?

0 投票
3 回答
368 浏览

linq-to-sql - 具有公共列的表的 DRY LINQ 语句

这是一个有趣的问题。有没有办法使用 LINQ to SQL 编写一些代码,它能够执行表更新,只知道给定的表包含列 x、y、z,但在编译时不知道它正在处理哪个表?

我的数据库模式中有几个表共享一些列,我需要应用一个基于集合的 UPDATE 操作,无论我们正在处理哪一个表,它的逻辑过程都是相同的。

这是一个简单的例子:假设您有 3 个实现邻接模型层次结构的表(即每行包含一个主键 ID 和一个自引用父 ID 列)。每个表还有一个“禁用”布尔标志。当我禁用任何这些实体的实例时,它应该通过子项级联,即

UPDATE MyTable SET Disabled = 1 WHERE ID = @ID 或 Parent_ID = @ID

我不想为每个实体编写这种 LINQ 语句,它违反了 DRY。这个例子可能看起来微不足道,但随着例子变得越来越复杂,你复制的代码数量也越来越多。我确信使用接口和泛型必须是可能的,但我正在努力想出一个优雅的解决方案。

0 投票
8 回答
1219 浏览

sql - 您将如何在 SQL 脚本中强制执行 DRY(不要重复自己)?

我正在使用包含一些更新的脚本更改数据库(oracle),如下所示:

在这种情况下,您将如何执行 DRY(不要重复自己)?

我对解决以下两个反复出现的问题特别感兴趣:

  • 定义一个仅可从此脚本中获得的函数以提取子查询SELECT id FROM category WHERE code = 'ABC'

  • 创建一组替换规则(可能类似于{"X_Y": "yx", "X_Z": "xz", ...}流行的编程语言),然后在其上迭代单个更新查询。

谢谢!

0 投票
6 回答
255 浏览

coding-style - 那里有任何代码干燥器工具吗?

我有一个很大的代码库,到处都有很多重复的或几乎重复的代码,它几乎是代码可以得到的 unDRY,但是很难跟踪“重复”,所以我想知道是否有任何工具寻找潜在的 DRYable 代码,比如 diff 工具或 Hamming 距离分析器,不需要语言特定的知识或类似的东西。

那么像这样的工具有什么线索吗?

0 投票
6 回答
991 浏览

code-analysis - 您使用什么重复检测阈值?

我们都同意重复是邪恶的,应该避免(不要重复自己的原则)。为确保这一点,应使用静态分析代码,如Simian(多语言)或Clone Detective(Visual Studio 插件)

我刚刚阅读了Ayende 关于科比的帖子,他说:

Kobe 的 8.5% 是复制粘贴代码。那就是在灵敏度调高的情况下,如果我们将阈值设置为 3,这是我通常所做的,它会上升到 12.5%。

我认为 3 作为阈值非常低。在我的公司,我们提供质量代码分析即服务,我们的默认重复阈值设置为 20,并且存在大量重复。我无法想象如果我们将其设置为 3,我们的客户甚至都不可能考虑更正。

我理解 Ayende 对 Kobe 的看法:它是一个官方样本,并被宣传为“旨在指导您规划、构建和实施 Web 2.0 应用程序和服务”。所以对质量的期望很高。

但是对于您的项目,您使用什么最小阈值进行复制?

相关问题:您如何狂热地消除代码重复?

0 投票
2 回答
329 浏览

ruby-on-rails - Rails - 两个控制器或添加动作?

设计具有管理部分和面向公众部分的 Web 应用程序。感觉就像为“索引”和“显示”设置一个面向公众的控制器有点多余。我读过的所有建议都为管理员建议了一个命名空间,这很好。我只是想知道我是否应该有一个带有附加操作的控制器,比如“list_public”或类似的东西。

我是 Rails 的新手,所以也许我什么都不关心。我只是不喜欢将所有这些具有相同名称的控制器、视图、助手分散在我的项目目录中的想法。

有人对此有任何见解吗?提前致谢。