首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏开发笔记

    Chapter 2 :重构的原则

    2,为什么重构? 为了后续的代码维护和修改,易读是重构的核心价值。

    78110发布于 2020-01-22
  • 来自专栏国产程序员

    面向对象的7种设计原则(2)-接口隔离原则

    或许有的人认为接口隔离原则和单一职责原则很像,但两个原则还是存在着明显的区别。单一职责原则是在业务逻辑上的划分,注重的是职责。接口隔离原则是基于接口设计考虑。 例如一个接口的职责包含10个方法,这10个方法都放在同一接口中,并且提供给多个模块调用,但不同模块需要依赖的方法是不一样的,这时模块为了实现自己的功能就不得不实现一些对其没有意义的方法,这样的设计是不符合接口隔离原则的 接口隔离原则要求"尽量使用多个专门的接口"专门提供给不同的模块。

    96410发布于 2020-07-13
  • 来自专栏huofo's blog

    设计模式(07)——设计原则2

    KISS原则 Keep It Simple and Stupid 这个原则听起来比较简单,重点是理解什么样的代码是简单的,代码行数少就是简单的代码吗??? 因此如果没办法,在特定场景下,只能采用该算法的实现,那么使用这种复杂逻辑就不是违反 KISS 原则了,因为没办法。 DRY原则 定义 英语解释为:Dont repeat yourself,可以理解为不要写重复的代码,要做好代码的可复用性。 但该规则跟 KISS 原则一样,听起来可能比较简单,但是在实际使用中,却要注重的一个原则。 因为在该原则中,有一个很关键的点,什么样的代码是重复的代码,只是简单的代码一样就是违反该原则了吗? 迪米特原则 定义 迪米特原则是用来指导设计高内聚、低耦合代码的原则,因此我们先看一下什么是高内聚、低耦合。

    41620编辑于 2022-03-17
  • 来自专栏小樱的经验随笔

    设计模式六大原则2):里氏替换原则

            肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的。 定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 定义2:所有引用基类的地方必须能透明地使用其子类的对象。 问题由来:有一功能P1,由类A完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P由原有功能P1与新功能P2组成。 新功能P由类A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。 解决方案:当使用继承时,遵循里氏替换原则。 看上去很不可思议,因为我们会发现在自己编程中常常会违反里氏替换原则,程序照样跑的好好的。所以大家都会产生这样的疑问,假如我非要不遵循里氏替换原则会有什么后果?        

    63680发布于 2018-04-08
  • 来自专栏桃李博客

    检查搜索引擎蜘蛛爬虫真实性 博客 2 年前 桃李Taoli

    我们很多时候都会遇到伪造搜索引擎爬虫的UA,但是很多时候又无法判断他的真实性。 以下代码,为检验部分搜索引擎真实性的案例,如有更多方法,请回复评论。 因为英语不太好,所以下面的内容就有部分中文了。 ip2long($访问IP)) $访问IP = '未知IP'; $访问主机 = str_replace('.

    28210编辑于 2022-09-30
  • 来自专栏编程

    设计模式六大原则2):里氏替换原则

    SpringCloud实战视频下载 肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。 定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 新功能P由类A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。 解决方案:当使用继承时,遵循里氏替换原则。 里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义: 1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。 2、子类中可以增加自己特有的方法。 看上去很不可思议,因为我们会发现在自己编程中常常会违反里氏替换原则,程序照样跑的好好的。所以大家都会产生这样的疑问,假如我非要不遵循里氏替换原则会有什么后果?

    70290发布于 2017-12-29
  • 来自专栏用户4667108的专栏

    如何判断蜘蛛的真实性

    优化 虽说这种方法看起来不错,但是在实际使用中我的建议 1.先进行ua判断 2.验证有无nslookup缓存 有则真 无则进入3 3.进入nslookup反查 并缓存 这样的好处是速度快 耗时短 对用户优化不错 array_domain[$array_num - 1], $domain_postfix_cn_array)) { $re_domain = $array_domain[$array_num - 2]

    1.5K20发布于 2020-04-16
  • 来自专栏∑小熊猫的博客

    JAVA 设计模式系列(2) —— 设计原则

    Java 设计模式的相关原则 一、单一职责原则 单一职责原则: 应该有且仅有一个原则引起类的变更 单一职责可以简答的理解为,一个类或者对象,承担的只能应该尽可能单一。 里氏替换原则:可以使用父类或接口指针指向子类,这样在一段代码中,父类对象全部替换称为子类对象,对程序也不会产生太多影响。 里氏替换原则可以简单的理解为多使用父类或者接口来指代子类的对象,降低代码的耦合度。 ) 三、依赖倒置原则 依赖倒置原则可以简单看做以下三条: 高层模块和低层模块之间不可以直接依赖,而是通过接口或者抽象类来产生依赖 接口或抽象类不依赖于实现类 实现类依赖接口或抽象类 依赖倒置的优点: 减少类之间的耦合 六、开闭原则 开闭原则:软件实体应该对扩展开放,对修改关闭

    42610发布于 2020-12-31
  • 来自专栏小语雀网

    JS身份证真实性验证

    ; return false; } //身份证真实性验证 function testId(value) { var vcity = { 11: "北京", 12: "天津 )月(2位)日(2位)校验位(3位),皆为数字 if (len == '15') { var re_fifteen = /^(\d{6})(\d{2})(\d {2})(\d{2})(\d{3})$/; var arr_data = card.match(re_fifteen); var year = arr_data [2]; var month = arr_data[3]; var day = arr_data[4]; var birthday d{2})(\d{2})(\d{3})([0-9]|X)$/; var arr_data = card.match(re_eighteen); var year

    2.3K10编辑于 2022-05-06
  • 来自专栏闻语博客

    JS身份证真实性验证

    ; return false; } //身份证真实性验证 function testId(value) { var vcity = { 11: "北京", 12: "天津 )月(2位)日(2位)校验位(3位),皆为数字 if (len == '15') { var re_fifteen = /^(\d{6})(\d{2})(\d {2})(\d{2})(\d{3})$/; var arr_data = card.match(re_fifteen); var year = arr_data [2]; var month = arr_data[3]; var day = arr_data[4]; var birthday d{2})(\d{2})(\d{3})([0-9]|X)$/; var arr_data = card.match(re_eighteen); var year

    2.8K10发布于 2021-01-21
  • 来自专栏全栈程序员必看

    BGP选路原则2)-local-preference

    2、修改local preference改变选路 默认情况下R4的bgp表中: R4#sh ip bgp BGP table version is 2, local router ID is 44.44.44.44 0 23 1 i *> 34.1.1.3 200 0 23 1 i 如果在此基础上我们修改R2过来路由的 weight,来比较weight和local-preference的优先级 R4: R4(config)#ip prefix-list 2 per 1.1.1.0/24 R4(config)#route-map weight per 20 R4(config-route-map)#mat ip add prefix-list 2 R4(config-route-map)#set weight 100 R4(config router bgp 4 R4(config-router)#nei 24.1.1.2 route-map weight in BGP表: R4#sh ip bgp BGP table version is 2,

    83620发布于 2021-08-12
  • 来自专栏明志德到的IT笔记

    《软件开发的201个原则》—— 一般原则、需求原则、设计原则、编码原则、测试原则、管理原则、产品原则、演变原则

    详情参见链接2原则24 把工具交给优秀的工程师 软件工程师使用工具(例如CASE)会变得更多产,就像作家使用文字处理软件变得更多产一样(见原则23)。 第3章 需求工程原则 需求工程包括以下活动: (1)提出或研究需要解决的问题;(2)具体说明一个能解决该问题的系统外部(黑盒)行为。 原则67 保持简单 一个简单的架构或者一个简单的算法,在实现高可维护性方面,有很长的路要走。记住KISS原则。另外,当你将软件分解成子组件时,要记住,一个人很难同时理解超过7(+2)或(-2)个事物。 本原则的含义包括: 1.顶部要包含详细的对外说明,用以明确定义程序的目的与用途。 2.顶部要说明外部可访问的方式、局部变量和算法。 事实上,你不仅应该测试让它处理x个组件,还应该让它处理x+1或者x+2(或者更多)个组件,看看会发生什么(见原则58) 。

    1.9K20编辑于 2023-10-21
  • 来自专栏技术之路

    设计原则——开闭原则

    什么是开闭原则? 在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即应当可以在不必修改源代码的情况下改变这个模块的行为。 如何运用开闭原则? 开闭原则解决问题的关键在于抽象化,把系统所有可能的行为抽象成一个抽象底层,这个抽象底层规定出所有的具体实现必须提供的方法的特征,给系统定义出一个一劳永逸,不再修改的抽象设计,此设计允许有无穷尽的行为在实现层被实现 遵守开闭原则进行如下改变 打折类: public class OffNovelBook extends NovelBook { public OffNovelBook(String name

    39600编辑于 2024-04-23
  • 来自专栏PM吃瓜(公众号)

    pdca原则 & smart 原则

    Plan:制定目标与计划 Do:任务展开,组织实施 Check:对过程中的关键点和最终结果进行检查 Action:纠正偏差,对成果进行标准化,并确定新的目标,制定下一轮计划 smart 原则 人们在制定工作目标或者任务目标时

    2.4K10编辑于 2023-03-02
  • 内容严格遵循真实性、准确性和完整性原则

    真实性:所有信息基于原始材料,未添加未提及细节或主观推测。 准确性:聚焦决策价值指标,粗体标注关键数据/结论,并注明数据来源(原始材料)。 DDoS防护范围:整合版覆盖EdgeOne标准版和企业版(防护对象包括域名及四层代理实例),提供无限次/2次全力防护(单次最长24小时)。undefined来源:原始材料量化数据段。 扩展灵活性:支持国内防护扩展包,可升级中国大陆可用区Tbps级防护能力(源自注2)。undefined来源:逐段扫描提取材料所有优势点。 四、典型案例 (材料未提供具体客户案例信息,此部分基于真实性原则省略。) 总结 腾讯云EdgeOne平台提供一体化边缘安全加速服务,结合整合版DDoS高防强化防护能力。

    7810编辑于 2026-04-01
  • 来自专栏JavaEdge

    软件设计七大原则实战(二)-开闭原则1 开闭原则的定义2 开闭原则的庐山真面目3 实例

    1 开闭原则的定义 开闭原则是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统,先来看开闭原则的定义: Software entities like classes,modules 对于开闭原则,我们也采用这三步来分析,即什么是开闭原则,为什么要使用开闭原则,怎么使用开闭原则2 开闭原则的庐山真面目 定义已经非常明确地告诉我们:软件实体应该对扩展开放,对修改关闭 其含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化 ? 好办法,修改也少,风险也小,修改后的类图如图6-2所示。 ? image 图6-2 扩展后的书店售书类图 OffNovelBook类继承了NovelBook,并覆写了getPrice方法,不修改原有的代码。

    1.3K20发布于 2018-09-20
  • 来自专栏求道

    设计原则之开闭原则

    StringFormatUtil.stringFormat(MSG)); } } 程序必须首先让人类理解,然后顺便让机器能执行^_^xxxx Process finished with exit code 0 总结 通过上述代码可以知道,开闭原则是是为了避免过多的修改原有的代码逻辑 ,用扩展代替修改而衍生的一个原则,不可否认,他也是所有的设计模式都想表达的一个结果,高扩展性。 开闭原则也并不是免费的。有些情况下,代码的扩展性会跟可读性相冲突。比如,我们之前举的 StringFormat格式化的例子。

    84230发布于 2020-09-15
  • 来自专栏sickworm

    《敏捷软件开发:原则、模式与实践》笔记(2

    第六章 一次编程实践 原文保龄球规则:(文末) https://www.twblogs.net/a/5b957acb2b717750bda47bd5/zh-cn/ 原文需求: 记录一届保龄球联赛的所有比赛 uint8 round9_0, uint8 round9_1, uint8 round10_0, uint8 round10_1, uint8 round10_2, } uint8 round9_0,    uint8 round9_1,    uint8 round10_0,    uint8 round10_1,    uint8 round10_2,} 不存储最终该轮得分 这符合尽量简单的原则,依照他们的思路,确实也不需要这个。我现在觉得我这个 scores 数组也非常累赘。 文中先考虑一般情况,再考虑特殊情况,这也是正确的。 是否允许多投 1 或 2 次取决于输入(裁判)。 文中提到,大意:增加各种类来提高软件通用性不等于易于维护(需求变更),易于理解才时易于维护的。

    41710发布于 2019-12-23
  • 来自专栏Android 研究

    PMI-ACP 敏捷项目管理2——敏捷12原则

    一、敏捷的原则: 除了敏捷宣言之外,宣言的发起者还为敏捷方法提供了12条指导原则 1、我们的最高目标是通过尽早和持续地交付有价值的软件/产品来满足客户。 2、即使在项目开发的后期,仍欢迎对需求提出变更。敏捷过程通过拥抱变化,帮助客户创造竞争优势。 3、要不断交付可用的软件,周期从几周到几个月不等,且越短越好。 12、团队要定期回顾和反省如何能够做到更有效,并相应地调整团队的行为 二、敏捷的原则的解读 (一)、我们的最高目标是通过尽早和持续地交付有价值的软件来满足客户 第一点 是要满足客户需求。

    2.9K30发布于 2018-08-30
  • 来自专栏python+前端 知识分享

    【Python模块2】- 模块搜索顺序、内置属性、开发原则

    文件和模块同名报错验证:新建一个random.py文件和模块同名,可以看出PyCharm也给我们提示了(randinth函数有个灰色底纹),此时再来运行文件,报错2》 模块内置属性__file__Python 分别从两种情况来看看完整路径:1.random.py文件存在,和模块名冲突情况,如下图:2删除random.py文件:点击右键打开面板点击Delete,出现一个对话框点击OK后继续出现一个面板,这里我们点击 删除提示信息,random文件已经被其他文件件导入了,是否确定删除3.删除后运行代码,查看random模块完整路径,如下图:----二、开发原则原则:每一个程序员开发出来的文件都应该是可以被导入的一个独立的 如果是被其他文件导入的,__name__就是模块名如果是当前执行的程序,__name__是__main__(永远是固定的__main__)代码演练:1.在模块中执行__name__,执行结果永远都是__main__图片2.

    1.2K20编辑于 2022-10-05
领券