首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
既有专题
总结如何成为“好”代码——读《重构:改善既有代码的设计》有感
读后感 说是“读后感”,其实并不是看得很仔细,尤其是各种代码例子,我基本上是跳过的。个人觉得,重构这件事上,关键是要能嗅出坏代码,知道什么是好代码,这样目标明确后,重构的手段其实是水到渠成的,唯一要注意的就是书中强调的:要以小步为单位稳打稳扎进行。 我所理解的“好”代码 核心目标 那么如何才是“好”代码?书中的答案是:“人们是否能轻而易举地修改”,而我觉得抽象层级更高的描述是:易于未来的工
阅读更多...
div既有背景图片又要有背景颜色怎么做?
背景颜色(background-color)放在后面,背景图片(background: url())放在前面 即 效果如下 看,是不是又有背景图片又有背景颜色了
阅读更多...
什么领域/方向的产品经理既有发展前景又能做的长久
前几天我在知乎上回答了一道“目前什么领域的产品经理比较有发展前景?有推荐的课程吗?”的问题,讲得还比较实在,于是在这里也顺便分享一下。 TOP1.商业产品经理 之所以这个方向能排在第1,我认为有3点理由。 第1点:任何互联网企业或者产品,都需要考虑商业变现也就是盈利的问题,即便傲娇如微信,在发展到了一定阶段后都需要把商业变现(也就是赚钱)提到战略高度上来,而且会越来越重视商业变现的问题。
阅读更多...
阿里云SLB监听虚拟服务器组时,既有部署在k8s容器里的应用,又有部署在ecs机器上的应用,k8s应用无法连接部署在ecs机器上的应用
一、背景 阿里云SLB可以添加多个监听端口,包括http和tcp,但是当被添加的后端应用,既有部署在k8s里,也有部署在ecs机器里。同一个slb下,这种混合方式的监听,会导致部署在k8s应用中的应用无法连接后者,只能连接前者。 业务服务和通道服务都部署在阿里云的内网,同一个slb的监听,既有部署在ECS上的通道服务,也有部署在K8S容器里的通道服务。 而业务服务也是部署在K8S容器里,
阅读更多...
既有理论深度又有技术细节——深度学习计算机视觉
推荐序 我曾经试图找到一本既有理论深度、知识广度,又有技术细节、数学原理的关于深度学习的书籍,供自己学习,也推荐给我的学生学习。虽浏览文献无数,但一直没有心仪的目标。两周前,刘升容女士将她的译作《深度学习计算机视觉》初稿呈现给我,目的是要我从专业的角度对译文的严谨性把关。粗读一遍后,顿觉豁然开朗,油然生出得来全不费功夫之感。这大概就是我心心念念苦寻的那本书:该书对人工智能、机器学习、计算机视觉
阅读更多...
再次重温《重构改善既有代码的设计》这本书有感
1.背景 大概是2020年第一次买了《重构改善既有代码的设计》这本书,跳着翻读了一部分内容,了解了重构的基础知识。 2024年的今天,因为有老系统要重构,再次重温了这本书,有些感触分享一下。 2.为什么要重构 不管做什么事,都应该是价值为导向,那么重构前,要问自己或团队三个问题: 为什么要重构?如果不重构会怎样?重构的价值是什么?涉及多系统,重构的界限是什么? 3.重构万能策略 3.1
阅读更多...
重构改善既有代码的设计-学习(四):简化条件逻辑
1、分解条件表达式(Decompose Conditional) 可以将大块代码分解为多个独立的函数,根据每个小块代码的用途,为分解而得的新函数命名。对于条件逻辑,将每个分支条件分解成新函数还可以带来更多好处:可以突出条件逻辑,更清楚地表明每个分支的作用,并且突出每个分支的原因。 例如: if (!aDate.isBefore(plan.summerSt
阅读更多...
重构改善既有代码的设计-学习(一):封装
1、封装记录(Encapsulate Record) 一些记录性结构(例如hash、map、hashmap、dictionary等),一条记录上持有什么字段往往不够直观。如果其使用范围比较宽,这个问题往往会造成许多困扰。所以,记录性结构应该被封装成为一个类。 例如: organization = {name: "Acme Gooseberries", c
阅读更多...
【读书笔记】《重构_改善既有代码的设计》重构的方法论
重构的方法论 标题:【读书笔记】【读书笔记】《重构_改善既有代码的设计》重构的方法论 时间:2024.01.14 作者:耿鬼不会笑 重构是什么? 什么是重构: “重构”这个词既可以用作名词也可以用作动词。 重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。 重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下
阅读更多...
网易Q1财报:既有长,也有短
随着近期一系列利好政策的陆续出台,国内的平台经济治理暂时告一段落,但各大互联网平台面临的现实境况却是千差万别。随着新一个财报季的来临,各互联网大厂相继交出了自己的答卷,有的远超预期,有的却远不及预期,可谓是悲喜并不相通。在腾讯等一众互联网公司相继发布自己的财报后,网易也于日前交出了自己的成绩单。 近日,网易发布了其2022年第一季度的财报。财报数据显示,2022年第一季度,网易的营收为236亿元
阅读更多...
《重构-改善既有代
重要列表 1、如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构哪个程序,使特性的添加比较容易的进行,然后再添加特性 2、重构前,先检查自己是否有一套可靠的测试机制,这些测试必须有自我检验能力 3、重构技术就是以微小的步伐修改程序,如果你犯下错误,很容易便可发现它 4、任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员
阅读更多...
如果一个人总能满足于自己既有的生活状态,不努力也没什么
我爸爸的一个表弟,我的小表叔,不但是个非常聪明的人,而且长得也是一表人材。 “非常聪明”体现在他当年从皖北的一个名不见经传的野鸡高中考到了复旦大学,毕业之后的人生轨迹完全是“升职加薪、当上总经理、出任CEO、迎娶白富美、走上人生巅峰”的真实写照; 至于“一表人材”,记得我四五年级时第一次见到他,当时他正好是二十五六岁的青春年华,我看着竟然有种脸红心跳的感觉(尼玛这可是我亲表叔啊……),总
阅读更多...
将一个既有的Keil工程加入git管理的方法
摘自:https://www.stmcu.org.cn/module/forum/thread-626036-1-1.html 将一个既有的Keil工程加入git管理的方法 [复制链接] gaosmile 该用户从未签到 1574 主题 1601 帖子 0 蝴蝶豆 版主 最后登录 2020-10-14 发消息 电梯直达 楼主
阅读更多...
《重构改善既有代码的设计》之重构列表--在对象之间搬移特性(三)
六、Remove Middle Man(移除中间人) 某个类做了过多的简单委托动作。 让客户直接调用受托类。 动机 在Hide Delegate的“动机”一节中,我谈到了“封装受托对象”的好处。但是这层封装也是要付出代价的,它的代价就是:每当客户要使用受托类的新特性时,你就必须在服务端添加一个简单委托函数。随着受委托类的特性(功能)越来越多,这一过程会让你痛苦不已。服务类完全变成一个“中间人”,
阅读更多...
《重构改善既有代码的设计》之重构列表--在对象之间搬移特性(二)
三、Extract Class (提炼类) 某个类做了应该由两个类做的事。 建立一个新类,将相关的字段和函数从旧类搬移到新类。 动机 你也许听过类似的教诲:一个类应该是一个清楚的抽象,处理一些明确的责任。但是在实际工作中,类会不断成长扩展。你会在这儿加入一些功能,在那儿加一些数据。给某个类添加一项新责任时,你会觉得不值得为这项责任分离出一个单独的类。于是,随着责任的不断增加,这个类会变得过分复
阅读更多...
《重构改善既有代码的设计》之重构列表--在对象之间搬移特性(一)
一、Move Method(搬移函数) 你的程序中,有个函数与其所贮类之外的类进行更多交流。 在该函数最常引用的类中建立一个有着类似行为的新函数。将旧函数编程一个单纯的委托函数,或是将旧函数完全移除。 动机 “搬移函数”是重构理论的支柱。如果一个类有太多的行为,或如果一个类与另一个类有太多合作而形成的高度耦合,我就会搬移函数。通过这种手段,可以使系统中的类更简单,这些类最终也将更干净利落的实现
阅读更多...
《重构改善既有代码的设计》之重构列表--重新组织函数(三)
七、Remove Assignments to Parameters(移除对函数的赋值) 代码对一个参数进行赋值 以一个临时变量取代该参数的位置 Int discount(int inputVal,int quantity,int yearToDate){ If(inputVal > 50) inputVal -= 2; } 转换后: Int discount(int inputVal
阅读更多...
《重构改善既有代码的设计》之重构列表--重新组织函数(二)
四、Replace Temp with Query(以查询取代临时变量) 你的程序以一个临时变量保存某一表达式的运算结果。 将这个表达式提炼到一个独立函数中。将这个临时变量的所有引用点为对新函数的调用。此后,新函数就可被其他函数使用。 Double basePrice = _quantity * _ itemPrice; If(basePrice >1000){ Return basePric
阅读更多...
《重构改善既有代码的设计》之重构列表--重新组织函数(一)
一、Extract Method(提炼函数) 你有一段代码可以被组织在一起并独立出来。 将这段代码放进一个独立函数中,并让函数名称解释该函数的用途。 Void printOwing(double amount){ printBanner(); //print details System.out.println("name:" + _name); System.out.println("amou
阅读更多...
《重构改善既有代码的设计》之代码的坏味道(三)
十一、Parallel Inheritance Hierarchies(平行继承体系) Prallel Inheritance Hierarchies其实是Shotgun Surgery的特殊情况。在这种情况下,每当你为某个类增加ige子类,必须也为另一个类相应增加一个子类。如果你发现某个继承体系的类名称前缀和另一个继承体系的类名称前缀完全相同,便是闻到了这种坏味道。 消除这种坏
阅读更多...
《重构改善既有代码的设计》之代码的坏味道(二)
三、Large Class(过大的类) 如果想利用单个类做太多事情,其内往往会出现太多实例变量。一旦如此,Duplicate Code 也就接踵而至了。 四、Long Paramter List(过长参数列) 如果向已有的对象发送一条请求就可以取代一个参数,那么你应该激活重构手法Replace Parameter with Method。在这里,“已有对象”可能是函数所属类内的一
阅读更多...
《重构改善既有代码的设计》之重构列表--大型重构
一、Tease Apart Inheritance (梳理并分解继承体系) 某个继承体系同时承担两项责任。 建立两个继承体系,并通过委托关系让其中一个可以调用另一个。 动机 继承是个好东西,它可以明显减少子类中的代码量。函数的重要性可能并不和它的大小成比例--在继承体系中尤然。 不过,先别急着为这个强大的工具欢呼雀跃,因为继承也很容易被误用,并且这种误用还很容易在开发人员之间蔓延。今天你为了一
阅读更多...
《重构改善既有代码的设计》之重构列表--处理概括关系(三)
九、Collapse Hierarchy(折叠继承体系) 超类和子类之间无太大区别。 将它们合为一体。 动机 如果你曾经编写过继承体系,就会知道,继承体系很容易变得过分复杂。所谓重构继承体系,往往是将函数和字段在体系中上下移到。完成这些动作后,你狠可能发现某个子类并未带来该有的价值,因此需要把超类和子类合并起来。 做法 1、选择你想移除的类:是超类还是子类? 2、使用Pull Up Field
阅读更多...
《重构改善既有代码的设计》之重构列表--处理概括关系(二)
五、Push Down Field(下移字段) 超类中的某个字段只被部分(而非全部)子类用到。 将这个字段移到需要它的子类中去。 动机 Push Down Field 与Pull Up Field恰恰相反:如果只有某些(而非全部)子类需要超类内的一个字段,你可以使用本项重构。 做法 1、在所有子类中声明该字段。 2、将该字段从超类中移除。 3、编译,测试。 4、将该字段从所有不需要它的那些子类
阅读更多...
《重构改善既有代码的设计》之重构列表--处理概括关系(一)
有一批重构手法专门用来处理概括关系(既继承关系)。 一、Pull Up Field(字段上移) 两个子类拥有相同的字段。 将该字段移至超类中。 动机 如果各子类是分别开发的,或者是在重构过程中组合起来的,你常会发现他们拥有重复特性,特别是字段更容易重复,这样的字段有时拥有相似的名字,但也并非绝对如此。判断若干字段是否重复,唯一的办法是观察函数如果使用它们。如果它们被使用的方式相似,你就可以将它
阅读更多...
《重构:改善既有代码的设计》-学习笔记二(+实战解析)
我不是个伟大的程序员;我只是个有着一些优秀习惯的好程序员而己 本人比较直接,不说虚的,直接上干货。 目录 Long Parameter List(过长参数列) Divergent Change(发散式变化) Shotgun Surgery(散弹式修改) Feature Envy(依恋情结) Data Clumps(数据泥团) Primitive Obsessi
阅读更多...