坚守一个目标---科里定律

原创 2013年12月05日 14:07:39
在“Outliving the Great Variable Shortage”(应对变量短缺)一文中,Tim Ottinger提到了“科里定律”(Curly’s Law):

一个变量应该代表一样东西,并且只能代表一样东西。它不应该在一种情况下代表这个意思,而在另一种情况下又代表不同的意思。它不能一次代表两样东西。它不能既是地板蜡,又是甜点上的打顶。它应该只有一个含义,并且自始至终只有一个含义。

在1991年上映的喜剧《城市乡巴佬》中,伟大的已故演员Jack Palance扮演了一位白发斑斑的牛仔Curly Washburn。科里定律便出自电影里的这一小段对话:

《城市乡巴佬》(CitySlickers)是一部关于人生、牛仔和中年危机的喜剧片。三个面临中年危机的纽约都市人,面对破裂的婚姻、乏味的工作和一成不变的生活,决定暂时抛开烦恼,到大西部加入从墨西哥到科罗拉多的“赶牛队”,体验儿时当牛仔的梦想。结果,三人在“赶牛队”的生活并不如西部电影中那般浪漫刺激,最后他们体验出:“做一个真正成熟的成人,并不是一件容易的事。”——译者注


Curly:你知道人生的秘密是什么吗?

Curly(竖起了一根手指):就是这个。

Mitch:你的手指?

Curly:一个目标。就一个目标。你须坚持这个目标,心无旁骛。

Mitch:但是,这个目标是什么呢?

Curly(笑):这就是你要去寻找的。

科里定律:坚守一个目标。这个定律在现代软件开发的几个核心原则中都有体现:

·       Don’t Repeat Yourself(DRY,即避免重复):如果你有多种方式来表达同一件事情,总有一天,这两种或者三种不同的表达方式会失去同步。即使没出现这种情况,当你需要做点什么改动时,你一定会因为要同时维护它们而感到头痛不已。改动总是会发生的。如果你想让软件保持灵活并易于维护,避免重复是非常重要的。

·       Once And Only Once(OAOO,即唯一一次):每个行为的声明应当发生一次,并且只发生一次。当你重构代码的时候,如果这不是主要的目标,至少也应该是主要目标之一。设计的目标是为了消除重复的行为声明,方法是通过合并或者使用统一的抽象来替代多个相似的实现。

·       Single Point Of Truth(SPOT,即单点真理):重复会造成不一致,并以一种微妙的方式破坏代码,因为在你需要修改所有的重复代码时,你可能只改了其中的一部分。这常常意味着,你没有好好地考虑代码的组织结构。每当你看到有重复代码的时候,你要知道那是一个危险信号。复杂是一种成本,不要加倍付出。

尽管科里定律完全适用于标准化和去除冗余,但“坚守一个目标”与上面的“每件事只做一次”的不同表述比起来,两者之间存在着细微的差别。科里定律更为深入,而Bob Martin将其称为“单一职责原则”(Single Responsibility Principle,简称SRP):

单一职责原则指的是,就一个类而言,应该仅有一个引起它变化的原因。举例来说,看下面的这个类:

Class Employee

{

             Public MoneycalculatePay()

             Public void save()

             Public StringreportHours()

}

这个类违反了单一职责原则,因为下面3个原因都会引起它的改变:

1.               薪酬的计算规则;

2.               数据库结构;

3.               报告时间的字符串格式。

我们不希望一个类受到3个完全不相干的因素影响。我们不希望每次报告的格式发生改变的时候,或者数据库管理员变更数据库结构的时候,再或者管理人员调整薪酬的计算方法的时候,这个Employee类总是要跟着改变。我们更希望把这些功能分拆到不同的类中,这样的话,他们就可以各自独立地变化。

科里定律告诉我们的是,要为每段代码选择单一而清晰的目标——坚持只做一件事。这一点已经很清楚了。但是,至于选择一个目标,你实际上要排除很多很多你可能做的其他事情。科里定律同时也告诉我们,要有意识地选择你的代码不做什么。这比选择做什么要难得多,因为它与软件开发者与生俱来的全能癖好格格不入。它可能意味着要把代码打散,违反传统的OOP规则,或者引入重复代码——我们的前进方式是“退一步,进两步”。

总之,每一个变量,每一行代码,每一个函数,每一个类,每一个项目都应该坚持一个目标。遗憾的是,我们通常要等到最后结束的时候才会发现那个目标。

坚守一个目标---科里定律

在“Outliving the Great Variable Shortage”(应对变量短缺)一文中,Tim Ottinger提到了“科里定律”(Curly’s Law): 一个变量应该代表一...
  • uhnt4556
  • uhnt4556
  • 2013年12月05日 14:07
  • 313

科里定律:坚守一个目标

科里定律告诉我们:每一个变量,每一行代码,每一个函数,每一个类,每一个项目都应该坚持一个目标。遗憾的是,我们通常要等到最后结束的时候才会发现那个目标。...
  • happydeer
  • happydeer
  • 2013年12月05日 08:28
  • 3832

等待是一个过程,每一种坚守都是幸福

每个人都有一段情,或深或浅;每个人都有一个梦,或幻或真。汇集流年的点滴,无论冷暖,静静收藏;悠然岁月的丝缕,无论好坏,默默珍惜。      有一种最可怕的老去,不是容颜而是心境;有一种最美丽的成熟...
  • gdpppt2
  • gdpppt2
  • 2015年01月28日 16:32
  • 413

javascript函数科里化

函数科里化(Currying)是指是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。 下面的这个函数就是函数科里化的一个很好...
  • zp1996323
  • zp1996323
  • 2015年09月15日 18:07
  • 408

坚持平凡 创造非凡

坚持平凡  创造非凡 每个人都渴望拥有真正属于自己的人生舞台,获得人格的独立以及财务、时间、心灵的自由。但是,对于没有背景、缺少资金、人脉平平的普通人,这样的成功又谈何容易。所以,选择一个好的平台尤...
  • caoghui
  • caoghui
  • 2011年12月20日 20:46
  • 774

源于世界第一大酒窖摩尔多瓦的葡萄酒

>>>> 葡萄酒王国——摩尔多瓦        摩尔多瓦是一个拥有丰富及古老的葡萄酒酿造传统的国家,在葡萄种植及葡萄酒酿造领域,无论从基础研究、应用技术推广、科研力量、加工工艺、管理水...
  • happyppdog
  • happyppdog
  • 2018年01月14日 20:49
  • 218

那些IT行业的经典定律

几十年来,IT界有一些非常著名的定律,蕴含着行业发展的大智慧,非常有趣,略作收集总结,再加上一丁点自己的浅见~...
  • zhuwq585
  • zhuwq585
  • 2017年01月19日 14:59
  • 840

电视剧《五湖四海》1-28分集介绍

五湖四海分集剧情介绍:第一集 1948年。东北战场。连长傅子刚刚带领一连战士打下了一场漂亮的攻坚战,雄心万丈的准备向敌人的中心指挥部进军,却临时接到总部后勤部长张智指示,要他立即率一个尖刀连,直插敌...
  • sungblog
  • sungblog
  • 2012年03月14日 13:20
  • 10989

墨菲定律、彼得定律、 帕金森定律

墨菲定律--------错误风险定律 如果一件事,有可能发生错误,那这件事就必然会发生错误。 释:只要有风险发生的因素存在,就一定会有风险发生的可能;     只要有风险发生的可能,就一定会有风险发生...
  • Huhuang
  • Huhuang
  • 2014年04月30日 17:08
  • 736

【并发】Amdahl's Law 阿姆达尔定律

转自:http://book.2cto.com/201301/12892.html 利用Amdahl定律,可以计算出通过改进计算机某一部分而能获得的性能增益。Amdahl定律表明,使...
  • robinjwong
  • robinjwong
  • 2015年11月16日 22:11
  • 4913
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:坚守一个目标---科里定律
举报原因:
原因补充:

(最多只允许输入30个字)