问题标签 [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 投票
1 回答
467 浏览

ruby-on-rails - 想以更干燥的方式清理和更改使用 rails 模型的 unicode 表单字段

目前我正在使用它来去除空格。


我想做一些类似的事情来摆脱 MS word 类型的 unicode。目前我使用:


这种方法有效,但不是很干燥,因为我需要为 40 个表单字段执行此操作。

我原以为我可以使用类似的东西:


我知道我不了解这种工作方式。
当我 用puts some_variable =替换

self.attributes[u] =时, 我得到了控制台的正确输出。我只是不知道如何将该变量恢复到表单中。



如果它有助于错误的代码是self.attributes[u] =我不知道用什么替换它。我原以为我可以使用self.VariableNameOfField =但 rails 无法识别像这样直接使用的变量。

0 投票
5 回答
2922 浏览

zend-framework - DataMapper 模式会破坏 MVC 吗?

我一直在阅读多个 PHP 框架,尤其是 Zend 框架,但我对前进的正确方法感到困惑。

Zend Framework 不使用 ActiveRecords,而是使用 Table Data Gateway 和 Row Data Gateway 模式,并使用 DataMapper 将 Row Data Gateway 的内容映射到模型,因为当您的模型没有 1 时 ActiveRecord 会崩溃: 1 映射到您的数据库表。Zend 快速入门指南中有一个示例。

对我来说,他们的例子看起来非常臃肿,到处都是大量的 getter 和 setter。我遇到了各种关于域驱动设计的博客文章,他们认为使用这么多的 getter 和 setter 是不好的做法,因为它会将所有内部模型数据暴露给外部,因此它与公共属性相比没有优势。这是一个例子

我的问题:如果你删除那些 getter 和 setter,你将如何呈现你的视图?在某些时候,数据必须到达视图,以便您可以向用户实际展示一些内容。遵循 DDD 建议似乎打破了 MVC 中 M 和 V 之间的分离。遵循 MVC 和 Zend 示例似乎破坏了 DDD,让我为我的所有模型输入了大量的 getter、setter 和 DataMapper。除了大量的工作之外,它似乎也违反了 DRY。

我真的很感激一些(链接到)好的例子或更多关于它们如何组合在一起的信息。我正在努力提高我的建筑和设计技能。

0 投票
3 回答
1345 浏览

ruby-on-rails - Rails 重构动态行为的最佳实践

我已经开发了可能的国家/地区选择下拉列表,并且我想将此行为分解到地址模型中,这样我就不必每次都复制动态行为(或多或少在视图和控制器之间拆分)我希望用户能够输入完整的地址。

基本上,我正试图让我的脚趾更深入 DRY。但我不确定在哪里嵌入这些行为。我是使用模型还是助手来构建必要的表单?最重要的是:我在哪里以及如何调用动态行为来更新状态列表?我需要一个地址控制器,还是可以在模型中完成?

换句话说,我现在在视图中看到的是:

更新方法在控制器中:

最后,我得到了一个带有正确名称或空白文本字段的部分:

现在,我想做的是能够通过模型关联地址(例如,Person has_one :address)并在创建新人的表单中,能够使用类似的东西

这可以生成适当的下拉列表,动态耦合在一起,其结果可以通过 Person.address.country 和 Person.address.state 访问。

提前致谢!

0 投票
4 回答
452 浏览

c# - 如何使源代码成为 XML 文档的一部分而不违反 DRY?

我想将部分源代码添加到 XML 文档中。我可以将源代码复制并粘贴到一些 <code> 元素,如下所示:

保持这种状态会很痛苦。是否有其他可能性可以将源代码添加到 C# 中的 XML 文档?

我正在使用 Sandcastle 处理 XML 文档,并希望从中制作一个技术帮助文件 (*.chm)。我想将部分或完整的方法主体添加到该帮助文件中。


编辑: 感谢 slide_rule 的评论。我添加了一个更现实、更简单的例子:

假设我有这样的方法:

如果有可能将如何计算费用的信息添加到技术帮助文件中,那就太好了。

最明显的解决方案是将算法作为平淡无奇的文本写到评论中,例如:“如果账单的总金额小于 5000 则......”。

另一种解决方案是将方法的主体复制并粘贴到注释字段中,然后将其放入 <code> 元素中。这个方法体可以很容易地理解,即使没有太多关于 C# 的知识——所以把它放在技术帮助文件中没有错。

这两种解决方案都违反了 DRY 原则!我想将方法​​体或方法体的片段添加到帮助文件中,而不重复信息。

这在 C# 中可能吗?(我认为 RDoc for Ruby 能够做到这一点,但我需要一些 C# 解决方案)

0 投票
2 回答
377 浏览

ruby-on-rails - 如何在保持 DRY 的同时将多个操作重定向到单个操作?

我有一个OptionsController,其中包含一个动作account。相应的视图具有三种形式,它们分别发布到三个不同的操作update_profileupdate_userchange_password。每个动作都会运行,然后应该重定向回action,再次设置并呈现视图。

我试图变得干燥并创建一个after_filter来做重定向:

但是,这似乎没有被调用;相反,该行动抱怨无法找到其观点。

有什么办法可以以 DRY 的方式做到这一点,还是我应该在三个动作中的每一个中都坚持 redirect_to 调用?

0 投票
5 回答
1183 浏览

asp.net - 验证器是否重复业务逻辑?

我知道可以使用验证器来检查应用程序表示层中的数据输入(例如,正则表达式、必填字段等),并显示一条消息和/或必填标记图标。数据验证一般属于业务层。如何避免对我收集的数据维护两组验证?

编辑:我知道演示验证很好,它会通知用户,而且它不是万无一失的。事实仍然存在,不是吗,我在两个地方有效地检查了同一件事?

0 投票
9 回答
4759 浏览

unit-testing - 设置/拆卸会损害测试的可维护性吗?

这似乎引发了关于另一个问题的一些对话,我认为值得转入自己的问题。

DRY 原则似乎是我们解决维护问题的首选武器,但测试代码的维护呢?是否适用相同的经验法则?

开发人员测试社区中的一些强烈声音认为设置和拆卸是有害的,应该避免......仅举几例:

事实上,xUnit.net 已经完全出于这个原因将它们从框架中删除了(尽管有一些方法可以绕过这个自我强加的限制)。

你有什么经验吗?设置/拆卸是否会伤害或帮助测试可维护性?

更新:像 JUnit4 或 TestNG(@BeforeClass、@BeforeGroups 等)中可用的更细粒度的结构会有所作为吗?

0 投票
3 回答
1154 浏览

django - 保持 Django 视图 DRY

我有一些代码可以获取当前登录的用户。

我希望用户名显示在每个页面上。

目前我将代码放在每个视图中并将用户对象传递给每个模板

这似乎违背了 django 的 DRY 伦理。我如何通过重复自己来做到这一点?

编辑:也许用户是一个坏例子。

如果我想从数据库中获取对象列表怎么办?

并在每一页上列出它们。

我是否必须编写该代码并将列表传递给每个视图中的模板。或者我可以编写一些代码使该列表可用于所有模板吗?

0 投票
7 回答
4185 浏览

language-agnostic - 是否存在:重复代码查找器?

在不久的将来,我将继承一个有点大的项目。我最近一直在对其进行一些小的更新,并注意到它的某些部分可以使用一些重构,因为有些方法可以执行相同的操作,但差异很小。

我想知道是否有一种工具可以获取一堆源代码并找到类似的代码块,以便可以识别它们以进行可能的重构。如果存在模糊搜索,那就太好了,这样它就可以识别类似的操作(而不是逐字重复的代码块)。

我不指望程序会重构代码本身,只是识别潜在的重复。

我的平台是 C#,但任何解决方案都会有所帮助

0 投票
2 回答
794 浏览

configuration - 在 Hudson 中为 Hudson 配置项目报告生成

Hudson 有许多插件可以创建覆盖率、测试结果、指标和其他报告。

似乎所有这些都要求您为要完成报告的每个项目的构建脚本(或 Maven POM)添加额外的配置。例如,如果您想要一个 FindBugs 或 Cobertura 报告,您需要将报告生成步骤添加到您的项目中。

真的有必要更新每个 POM 文件吗?这是很多重复自己的事情,并且需要更新目标项目的源存储库(POM 所在的位置)。

是否可以在 Hudson 中设置一个启用报告生成的设置?似乎因为您需要做的就是使用其默认设置启用相应的 Maven 插件。这不能由 Hudson 在外部完成。