干燥原则的准确性

时间:2015-01-27 20:44:48

标签: html css dry

过去几周我一直在深入了解html / css,现在正尝试使用DRY原则(以及SMACSS / OOCSS / BEM)优化我的代码。我相信我对这一切都有一个很好的理解,但有一件事我还不清楚。

DRY原则应该100%适用吗?例如,让我们说,你有'text-transform:uppercase;'应用于两个不同的类。根据DRY原则,您可以从每个单独的类中删除规则集,并将其放在两个类的逗号分隔列表中。但过了一段时间,这不会使你的样式表变得一团糟,每个类在同一张表上被多次声明了吗?或者你的表单看起来真的无关紧要,因为你可以简单地搜索"大写"在搜索框中是否需要进行任何更改?

在这种情况下,您似乎无法获得任何性能提升。是的,您要从工作表中删除一个属性,但您还要添加一个全新的规则集并重复该类名称。

我知道可以根据偏好和每个项目以任何一种方式完成,但我更关心什么是最有效的方式(特别是在构建大型复杂网站时)。我希望在我的所有项目中保持一致。

是否有任何指导方针可以解决?例如,如果您要移除的属性数量大于X,那么可能只组合重复代码?或者只是在语义相关的情况下组合重复的代码?

3 个答案:

答案 0 :(得分:2)

如果您优化了可维护性,而不是严格遵守任何特定的教条,那么之后阅读您的代码的程序员将会感谢您。

请不要误会。干很重要,但你应该通过简单的健全性检查来改变它(或任何其他设计模式):“这有意义吗?”。在DRY的情况下,这将是“这些实际上是相关的吗?”。

如果答案为“是”,则强烈暗示,如果其中一个类要放弃text-transform:uppercase;另一个类,那么通过所有方法将其解除。

如果答案是“否”,那么你实际上要在以后维护它更加困难,因为你需要撤消两个类之间的人为耦合。

在这种情况下,简单地使用特定属性的类的清单列表是假干的,因为你肯定在重复自己。重复只是从属性移到了类。

答案 1 :(得分:0)

DRY原则完全是关于“不重复自己”。 如果你只是在同一个文件上工作,那么我建议你以一种可以理解的方式编写代码(足够干净),这样你就可以在需要时轻松编辑它。但是,如果其他人也开始研究它,那么将它保持干净和干燥就更为重要了。

您可能会认为应用DRY原则并不是必需的,因为您可以重复自己并且代码仍然有效。但是你可以争论,为什么要使用Sass(这是一个编译器,可以让你的css更短),你可以争论为什么压缩你的css文件(所以网站加载更快),因为没有它,它仍然会工作!

我的建议是始终考虑尽可能保持干爽和清洁。在你的例子中,你指出了一个小细节,当你清理CSS并且你意识到你只保存了2行额外的CSS时,DRY方法不会产生很大的不同。但是如果你有10000行CSS时应用它呢?

它使您仅定义ONCE属性。如果您需要一个可以节省多少重要代码和代码行数的示例,请查看以下内容:http://www.slideshare.net/jeremyclarke/dry-css-a-dontrepeatyourself-methodology-for-creating-efficient-unified-and-scalable-stylesheets

从长远来看,它将使您的样式表更清晰,更易于理解,更易于编辑! 所以我说它非常重要,如果你从一开始就可以钻进去,那么你以后会非常感激:)

答案 2 :(得分:0)

  

DRY原则应该100%适用吗?

不,它不打算成为。

DRY用于管理规范的信息来源。 DRY是为了避免“这些信息出现两次但不一样 - 这是正确的吗?”的问题。

与DRY没有区别:

.foo { text-transform: uppercase; color: red  } 
.bar { text-transform: uppercase; color: blue } 

.foo { color: red  } 
.bar { color: blue } 
.foo, bar { text-transform: uppercase; } 

因为text-transform: uppercase实际上是一个单位的信息。 DRY的目的不是让编码器通过重构重复的字符串来复制压缩算法,而是要识别多次表达相同语义关系的地方。

如果.foo.bar都用于要求大写的角色,则可能值得使用后一条规则,因为您可能希望同时更改两者。但是如果它们被用于两个不同的东西,它们都碰巧需要大写,那么就使用前一个规则,因为没有理由改变一个就必须改变后者。

对于这个特殊的例子和更普遍的CSS,它非常多。