美文网首页
关于DRY原则

关于DRY原则

作者: luochen1990 | 来源:发表于2015-06-19 10:22 被阅读0次

王垠最近的DRY原则的危害这篇文章引起了大家的关注,我正好借着这个上下文发表一下自己的看法。

自己很早就有“不重复”的觉悟,但当时自己的总结是:“如果A和B的代码很相似,并且它们在面对变化的时候很大概率是要求保持一致的,那么不要把A和B的代码重复写两遍”。 后来看到了所谓的“DRY”原则,第一反应是心有戚戚,第二反应是它说得太绝对了。

我说它“太绝对”并非出于某些普适的中庸观念得出的,我就举一个例子:

某电商管理页面左有导航栏,下有条目 [“商店管理”,“商品管理”, “数据统计”] ,其中每个导航栏条目下包含数个子页面,如“商品管理”下就有“商品列表”,“橱窗列表”等页面。现有需求:当用户处于某导航栏条目下的某个子页面的时候,高亮该导航栏条目。

  • 代码1
current_uri == "/goods/goods_list" or current_uri == "/goods/goods_showcase_list"
  • 代码2
current_uri in ["/goods/goods_list", "/goods/showcase_list"]
  • 代码3
current_uri.startsWith "/goods/"

对于这三段代码,我并不认为一种就一定比另外一种好。可能很多人会很诧异,明明代码3漂亮得多嘛!

当然我最后选择的也的确是代码3的写法,不过,确定用代码3之前,我确认了以下问题:

  1. 我能确定我在处理这段逻辑的时候总是会用==作比较么? 如果答案是否定的,我就不能从代码1转换到代码2

  2. 我能确定UI的导航栏上的条目(如“商品管理”)和页面的URL结构(如"/goods/")有固定的关系么? 有没有可能加入新的页面,它所属的导航栏条目和它的URL不满足以上关系? 如果答案是否定的,我就不能从代码2转换到代码3

  3. 这里的关键在于:我需要建立一个导航栏UI控件和页面URL之间的联系。那么这个逻辑关系只会在当前的需求里出现么?有没有可能这个逻辑在别的地方同样可能用到? 如果答案是否定的,我就不能写下代码3,而是应该把这段逻辑抽离成为独立的模块。

当然菜鸟和我和大师都可能写下代码3,然而每个人得到这段代码的过程是不一样的。大师的代码就是可以灵活地应对变化,这是因为人家的确想得比你多,而不是因为人家遵循了什么DRY原则。

相关文章

  • 关于DRY原则

    王垠最近的DRY原则的危害这篇文章引起了大家的关注,我正好借着这个上下文发表一下自己的看法。 自己很早就有“不重复...

  • DRY原则

    今天谈一个编程世界非常基本的原则,它有多基本?可能在我说出这个概念前,你已经不自觉的应用多年。那就是DRY原则,D...

  • DRY 原则

    Don’t Repeat Yourself。中文直译为:不要重复自己。将它应用在编程中,可以理解为:不要写重复的代...

  • 关于SOLID原则简单理解

    关于软件的设计原则其实很多,其中比较经典的有SOLID、KISS、YAGNI、DRY、LOD 等。SOLID原则并...

  • 2022-01-03 设计模式之DRY与迪米特法则总结

    DRY 原则 1.DRY 原则我们今天讲了三种代码重复的情况:实现逻辑重复、功能语义重复、代码执行重复。 实现逻辑...

  • 21 - DRY原则

    DRY 原则,它的英文描述为:Don’t Repeat Yourself。中文直译为:不要重复自己。将它应用在编程...

  • 创建ASP.NET Core MVC应用程序(6)-添加验证

    创建ASP.NET Core MVC应用程序(6)-添加验证 DRY原则 DRY("Don't Repeat Yo...

  • 代码设计原则

    1、DRY原则DRY是 Don't repeat yourself 的缩写,意思是"不要重复自己"。它的涵义是,系...

  • 那些iOS面试大厂必备的底层技巧

    1、KISS,DRY,YAGNI,Law of Demeter 简单原则(Keep It Simple and S...

  • DRY原则的危害

    很多编程的人,喜欢鼓吹各种各样的“原则”,比如KISS原则,DRY原则…… 总有人把这些所谓原则奉为教条或者秘方,...

网友评论

      本文标题:关于DRY原则

      本文链接:https://www.haomeiwen.com/subject/ppusqttx.html