【发布时间】:2013-12-09 18:06:10
【问题描述】:
我很难理解 DRY 原理
1) 我知道 DRY 原则的目的是避免信息的重复/重复,但在 DRY 的上下文中,information 一词指的是什么?它是否仅引用the state of the object(即Person 实体应该只有一个表示其birth data 的属性)还是该术语也引用behavior of the object(即Dog 实体应该只有一个表示@ 的方法987654327@)
2) 问题假设术语information 也指behavior:
DRY 就是不重复相同的信息,我将其解释为 我们不应该有两个或多个方法/代码 sn-ps 做完全相同的事情。但我认为术语repetition 在 DRY 的上下文中使用得更松散?也就是说,我已经看到了 DRY 也应用于具有 相似 行为的方法/代码 sn-ps 的示例(因此这些方法/代码 sn-ps 并没有做完全相同的事情)但是然后将这些方法/代码 sn-ps 替换为单个方法/代码 sn-p?!
谢谢
【问题讨论】:
-
Don't Repeat Yourself- 不要忘记你自己部分。每当您开始输入您已经输入的内容时,您的 DRY 警铃至少应该发出警告音。这实际上与状态或功能无关,而与代码重复有关。 -
@Floegipoky:“这与状态或功能无关”如果两个不同的类包含相同的状态,但是这两个状态中的每一个都是使用非常不同的逻辑获得的,或者如果两个类包含两个具有相同的方法行为,但是这两种行为是用两种截然不同的算法来表示的,那么根据你的说法,这不违反 DRY 吗?
-
不,您又忘记了
Yourself部分。 DRY 不是一成不变的编程法则,它是当有人意识到重复往往会导致多少问题时提出的经验法则。不要去寻找涵盖其所有细微差别的定义。像许多其他软件工程术语一样,它实际上只是对特定代码气味的描述。代码可以逐字复制,也可以在设计级别复制。你评论中的两次反例尝试都是后者的例子,这种类型往往更难发现。 -
@Floegipoky:所以在设计层面重复的代码也违反了 DRY?
-
通常,是的。就像我说的,不要去寻找 DRY 的定义,而是要了解促使为其创建标签的问题。这些问题主要涉及必须使多个相似的代码保持最新的额外复杂性。有些人将它应用于开发过程中涉及的所有内容,包括文档、样板代码等。每个人都有自己的工作定义;重要的是想想你(又是你自己)如何使用避免重复的原则来创建更好的软件。
标签: design-patterns dry