范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

通过代码重复来应对需求变化

  消除"代码重复"是绝大部分程序员矢志不渝追寻的目标。而在本文中,我们通过引入"代码重复"来解决开发中常见的需求变化。
  代码重复
  美国知名的软件工程师Sandi Metz曾经说过一句很经典的话:
  代码重复比错误的抽象伤害更小。(duplication is far cheaper than the wrong abstraction)
  或者说:
  宁可代码重复,也不要错误的抽象。(prefer duplication over the wrong abstraction)
  代码重复比错误的抽象伤害更小
  "错误的抽象"问题是非常普遍和棘手。我们经常在工作中发现下面的场景:A程序员看见了代码重复。A程序员提取了重复的代码并给它取了一个名字。这创建了一个新的抽象。它可以是一个新的方法,甚至可能是一个新的类。A程序员将重复的代码用新的抽象代替了。哈哈,代码是如此的完美。A程序员开心的跑开了。 时间流逝。对于目前如此完美的抽象,有一个新的需求出现。 B程序员被指派来完成这个需求。B程序员觉得有必要保留现有的抽象,但由于并不是在每种情况下都是完全相同的,他修改代码以接受一个参数,然后添加逻辑,根据该参数的值按条件去做正确的事情。曾经是通用抽象,现在根据不同情况而有不同的行为表现。现在又一个新的需求来了。X程序员又添加了一个额外参数,又一个新的条件。就这样循环下去直到代码无法理解。 然后你出现在这个场景里,你的生活也发生了戏剧性的转折。
  现存的代码具有强大的影响力。它的存在本身就表明它是正确的和必要的。我们知道代码代表了所花费的工作,并且我们非常有动力去保存这项工作的价值。不幸且可悲的事实是:代码越复杂、越难以理。也就是说,在创建代码时投入越多,我们就越会有保留这些代码的压力("沉没成本谬误")。就好像我们的潜意识告诉我们:"天哪,这么如此让人迷惑,一定花了很长时间才弄好。这些代码必然非常非常重要。让所有的努力付诸东流将是一种罪过。"
  沉没成本谬误:人们往往不愿意正视持续增加投资未必会带来更多回报的事实,而选择铤而走险地持续对过去投资失败的项目增资,以逃避过去投资失败带来的反悔心理。
  沉没成本谬误
  当你出现在上面的第8步时,这种压力也可能会迫使你继续前进,也就是说,通过更改现有代码来实现新的需求。然而我们面临的残酷的现实是:代码不再代表一个单一且通用的抽象,而是变成了一个包含条件的过程,其中交织着许多模糊关联的思想。它很难理解且很容易打破。
  如果你发现自己在这种情形下,不要被沉没成本所驱使。在处理错误的抽象时,最快的前进方法是回退。做以下几点:通过将抽象代码放回每个调用者来重新引入重复代码。在每个调用者中,使用错误抽象中传递的参数,来确定此不同调用者所需要调用的代码部分。删除不同调用者不需要的代码部分。
  通过这样做消除了抽象和条件,并将每个调用者减少到仅它需要的代码。 当你以这种方式回顾决策时,通常会发现虽然每个调用者表面上调用了一个共享抽象,但他们运行的代码却独一无二。 一旦你完全删除了旧的抽象,你就可以重新开始,重新隔离重复代码并重新提取抽象。
  在工作中人们勇敢地尝试以错误的抽象方式前进,但收效甚微。 添加新功能变得非常困难,每次成功都会使代码更加复杂,这使得添加下一个功能更加困难。 当他们将观点从"我必须保留我们对这些代码的投入"转变为"这些代码对解决以前的问题是有阶段性意义的,但也许我们已经从中学到了我们所需要的一切",接着根据当前需求重新思考它们的抽象,一切都变得更容易了。 一旦代码被放回调用者,前进的道路就变得显而易见,添加新功能变得更快、更容易。
  故事中的场景的寓意是什么? 不要被沉没成本谬误所困! 如果你发现自己通过共享代码传递参数和添加条件路径,则标明抽象是错误的。 也许这个抽象一开始可能是对的,但那一天已经过去了。 一旦抽象被证明是错误的,最好的策略是重新引入代码重复,让它告诉你什么是正确的。 虽然偶尔积累一些条件语句以深入了解正在发生的事情是有意义的,但如果你早点放弃错误的抽象,你会遭受更少的痛苦。
  当抽象错误时,最快的前进方式就是回退。 这不是退缩,而是朝着更好的方向前进。这样做, 你不仅将改善自己的工作,也会改善所有追随者的工作。
  参考资料:
  https://sandimetz.com/blog/2016/1/20/the-wrong-abstraction

舞剧大熊猫明年6月滚滚而来视频加载中从奥运福娃晶晶到好莱坞的功夫熊猫,再到北京冬奥会吉祥物冰墩墩,熊猫热风靡世界,从未降温。一个全新的熊猫IP来了今天(11月1日),记者从舞剧大熊猫开排仪式暨主创见面会上获DNF旭旭宝宝太羡慕!红19太刀武器诞生,自古红眼出高强前段时间旭旭宝宝大发神威,增幅出红19的短剑,使用继承功能,给变成了光剑,恰好职业是白手,作为百分比职业,提升那是相当离谱。但才短短过去几天,又一把红19武器诞生,这次是太刀,国服同世界人民携手开创人类更加美好的未来论学习贯彻党的二十大精神立志于中华民族千秋伟业,致力于人类和平与发展崇高事业,在党的二十大报告中,习近平总书记深刻指明我们党的责任与使命,强调中国始终坚持维护世界和平促进共同发展的外交政策宗旨,致力于推动五岁男童梦中猝死,这究竟是怎么回事?家长朋友们千万要注意了秋日生活打卡季五岁男童梦中猝死,尸检结果给所有的家长敲响了警钟,我也是刚刚才看到,十分的震惊,这是很多家长们极易犯的低级错误。五岁的小林特别可爱,这天呢,妈妈和往常一样给他吃了糯米男孩2岁前的样子人见人爱,一场高烧后只剩下手指能动天上的星星不说话,地上的娃娃想妈妈在云南昭通一家医院的病房里,一阵婉转的歌声给苍白的病房填了些色彩。这是小海最喜欢的歌,生病前如果听到妈妈唱这首歌他早就手舞足蹈的扭起来,可如今小海为啥老人常说过午不晒被?背后道理家长须知,让娃冬季少生病作者探长(共1706字,阅读约4分钟)又到了严寒的冬季,对于家有宝宝的父母来说,便会格外的关注宝宝的穿衣和保暖,就怕孩子着凉感冒。于是穿厚点,盖暖点就成为很多家长每天都会注意的事情我们的孩子是受父母的影响大还是同伴的影响大?今天我们来分享的话题是,你的孩子是怎么被身边的同伴影响的,我们的孩子是受父母的影响大还是同伴的影响大呢?在孩子零到六岁的时候,父母的影响起主要作用,经常讲三岁看大,七岁看老,说的就剖腹产的宝宝不聪明?首先我是支持剖腹产的,剖腹产生下的宝宝很聪明可爱。怀孕35周的时候问医生剖腹产还是顺产,医生说能顺产就顺产。而我身边的女性亲友,无一不劝我顺产,都说顺产好,能自己生就不要剖。她们说婴儿常晒太阳好处多,千万不要忽视这几点太阳婴儿晒太阳的时间在夏天,太阳比较毒上午8点9点,下午4点以后春秋季上午10点11点冬季上午10点1点每个地方的阳光强度不同,时间方面可做调整,同时晒太阳的时长要根据宝宝的身体情女孩起名醉翁池亭的女孩名,明月千里,草木生欢一曲新词酒一杯,自然浩瀚的宇宙,是如此的深奥和美丽,正如诗词的魅力一般,令人着迷,不少家长们在给宝宝起名时也将选用朗朗上口的诗句,聊表内心对文人墨客精神的向往,我们知道,孩子的名字挤豆豆也要命之前有新闻爆料,一个9天的婴儿,因为乳房肿大,被家里的老人挤成了乳腺炎!还有一些老人觉得,不管新生儿有没有异常,孩子的乳头挤一挤,可以发育的更好。这些都是毫无根据的做法。盲目给新生
出境游首发团相继抵沪游客有小惊喜也有新体验图说普吉岛新增多个观景平台采访对象供图(下同)新民晚报讯(记者杨玉红)这两天,申城第一批出境跟团游首发团陆续抵沪。暂停1107天后,组团看世界的上海游客收获了不少惊喜,也有一些新经辽各个时期后族对应辽代国运抛物线,是谁将其带向衰落?所谓后族,顾名思义,后族就是皇后(或皇太后)的家族。具体说,即是以皇太后皇后为核心,包括皇帝的母族妻族在内的家族成员构成的贵族集团。辽代后族是辽代一支重要的政治力量。辽前期,在开国浑源的皇帝女婿后唐末帝李从珂要想详细了解李从珂,还的从唐末名将李克用说起。李克用,本姓朱邪(又作朱耶),被唐朝皇帝赐姓李氏,沙陀族,神武川新城人(今山西雁门北部)。唐末至五代初年军阀,别号李鸦儿。因一目失明,武则天时期,马屁精们不仅升官发财,还免去牢狱之灾人们都不喜欢拍马屁的人,感觉他们为了讨好人,故意曲意逢迎他人,达到自己不可告人的目的。当是,有些人好像天生就能够摸透他人心理,靠拍马屁的功夫,让自己混得风生水起,别人对他们真是嫉妒两汉时期的朝请是什么?朝见频率是多久一次?有何意义?朝请概括地讲,就是定期或不定期地朝见皇帝。诸侯王朝请自不待言,王子侯公主朝请也有史实可证元朔五年,东莞侯吉有痼疾,不朝,废,国除元狩六年,建成侯拾坐不朝,不敬,国除。王子侯因不朝而论北宋时期的黄河退滩地文胡叁叔编辑胡叁叔引言黄河在北宋期间经常发生决流,甚至是改道。导致了整个北宋年间,毫无安宁之日,严重地影响到了农耕活动。在这种情况下,北宋官吏和民众积极地运用对黄河洪水的认识,进行五胡乱华时期,冉闵的一纸杀胡令到底杀了多少胡人?五胡乱华,现在中国所有史学家最不愿意提起的时代,它是中华汉民族的巨大浩劫,汉民族在中原地区差点被草原胡族屠戮一空,北方草原胡族视我中原汉族儿女为两脚羊,随时可杀可食,是中原地区汉民换种方式讲西汉吕雉为何要拉谋圣张良换种方式讲西汉吕雉为何要拉谋圣张良吕雉要拉的那个人,就是谋圣张良。此时的张良已经是赋闲在家,无奈的是,我不问世事,世事偏来问我。吕雉派了自己的哥哥吕泽前来,吕泽跟张良也是老熟人了,chatGPT还没搞懂,一键入眠的智能床黑科技也来了?!chatGPT还没搞懂,一键入眠的智能床黑科技也来了?!最近,AI机器人chatGPT的横空出世,吸引了全世界的目光。有问必答持续对话,还能写脚本肝论文敲代码不仅让一众专家们坐不住买新电视又多个理由?聊聊电视面板涂层不起眼但却很重要普通用户购买电视,大概只需要了解电视的尺寸和价格就行了而稍微懂行的玩家购买电视,可能就更关注画质亮度功能接口等方面了。但有一个地方可能无论普通用户还是评测人员,都容易忽略掉,那就是看完Windows11这八大特性,你会升级系统吗想知道Windows11有什么新功能,是否值得升级?一文给你说明白,喜欢请点赞关注虽然Windows11在开发之初确定的原则是保持熟悉,但Windows11仍有很多创新值得关注。全