页面重构中的设计模式 由 Ghostzhang 发表于 2014-07-02 02:40 查了下最开始的创建日期,竟然是2011年12月19日,这文章断断续续写了快3年,终于了算比较完整了,但可能相对还是写得有些简单了...,看不懂的同学欢迎给我留言,我尽量做补充。...原本是以为写成书的,所以看起来好像是有点那样,不过问了下相关人仕,好像至少也要5W字,而对于我的表达能力来说,硬要凑字数感觉还蛮难的,就不折腾了。...本地下载PDF 页面重构中的设计模式 from Ghost Zhang 以前写过的系列文章《 前言——页面重构中的设计模式 》,可以帮助理解,但需要注意的是,因为这期间有些想法上的变法,可能一些细节会不太一样...当然以最新的为准咯。
前言——页面重构中的设计模式 由 Ghostzhang 发表于 2012-11-09 02:56 前不久开始写《页面重构中的设计模式》,本想着内容应该是蛮多的,可是到约9000字的时候,发现写不下去了...之前在写《[页面重构中的模块化设计][]》系列时就发现,只是讲模块化有点窄了,有些很重要但并不是模块化的内容放不进去,所以才会想说是不是需要一个更大的主题,正好也接触了下设计模式相关的内容,觉得可能会合适吧...在开始下面的内容之前,可以先了解下我对模块化的理解,不然后面的内容可能会看得云里雾里的: 页面重构中的模块化思维 页面重构中的组件制作要点 样式的作用域──页面重构中的模块化设计(一) 栏目级作用域──...页面重构中的模块化设计(二) 继承──页面重构中的模块化设计(三) 模块化的核心思想──页面重构中的模块化设计(四) 基类、扩展类──页面重构中的模块化设计(五) CSS模块的注释——页面重构中的模块化设计...当然说到设计模式,我们可能最先想到的就是“工厂模式”、“观察者模式”等程序上的解决方案,而我们的话题似乎有点不同。
作者 | Ben Northrop 译者 | 刘雅梦 策划 | Tina 有一个应用程序充斥着技术债,严重的过时了,或者只是对用户服务不足,因此,我们需要了解我们的最佳选择是什么——是继续艰难地探索并逐步进行重构更有意义...Martin Fowler 在他的 《重构》 一书中是这样定义重构: 重构是一种用于重组现有代码主体,在不更改其外部行为的情况下更改其内部结构的规范技术。...从这种纯粹的意义上讲,重构主要是为了使代码更易于维护。这可能是分解冗长的或复杂的函数,修复不一致的命名,添加单元测试,或者重组类的层次结构、数据结构或模式。...在本文中,我们将使用更广泛的重构定义: 重构是一种方法,通过这种方法对现有的代码主体进行增量重组,以提高系统的质量属性。 最后,需要注意的是重构是关于迭代变更的。...其想法是在短时间内冻结现有系统的开发,然后将资源转移到替换系统上。我们将首先构建基础(使用更现代化的模式、工具、语言等等),然后将现有的功能迁移到该基础中。
java8中提供的很多新特性可以用来重构传统设计模式中的写法,下面是一些示例: 一、策略模式 上图是策略模式的类图,假设我们现在要保存订单,OrderService接口定义要做什么,而NoSqlSaveOrderStragegy...以及MySqlSaveOrderStrategy则提供了二种策略,分别是保存到nosql数据库,以及传统的mysql关系型数据库,最后在OrderServiceExecutor中通过构造函数注入最终要使用的策略...; subject.nofityAllObserver("002"); } 只用2个接口实现了观察者模式。 ...四、责任链/职责链模式 核心思想:每个处理环节,都有一个“指针”指向下一个处理者,类似链表一样。...重要提示:什么时候该用lambda,什么时候不用,这是要看情况的,如果处理逻辑相对比较简单,可以用lamdba来重构,以便让代码更简洁易读,如果处理逻辑很复杂,应该还是用“类”。
CountEntry是对应数据库中每种状态的数据条目记录,包含状态code和以及count两个字段, 我们可以使用mybatis实现数据库记录和java对象之间的转换。...重构初体验–反射 要重构上面的代码,对设计模式精通的人可以立马可以看出来这是使用策略模式/状态模式的绝佳场景,将策略模式稍微变换,工厂模式应该也是ok的,当然也有些人会选择使用反射。...除去反射这种方法,能想到的就剩下使用策略模式或者与其类似的状态模式,以及工厂模式了,我们以工厂模式为例,经典的架构UML架构图通常由三个组成要素: 抽象产品角色:通常是一个抽象类或者接口,里面定义了抽象方法...工厂角色:持有抽象产品类的引用,负责动态运行时产品的选择和构建 策略模式的架构图和工厂模式非常类似,不过在策略模式里执行的对象不叫产品,叫策略。...Ok,按照工厂模式的思路重构我们的代码,我们首先定义一个抽象产品接口FillCountService,里面定义产品的行为方法fillCount,代码如下所示: Java public interface
提示词越具体,输出就越精确,关于提示工程的更多信息可以参考《解读提示工程(Prompt Engineering)》以及《Agent 应用于提示工程》。...6 图谱辅助模式 图谱辅助模式是一种利用已有知识来增强提示的方法,从而帮助大型语言模型生成更准确的输出结果。...事实检查模式 为了降低产生错误或误导信息的风险,事实检查模式促使大型语言模型根据可靠的外部来源或数据库验证其输出。这种模式鼓励大模型提供支持性证据来证明其答案的可信性,从而促进准确的结果。...医学咨询:在医疗领域,事实检查模式可以帮助语言模型核实医学信息的准确性。模型可以引用权威的医学期刊或医学数据库,以支持其提供的医学建议或解释,从而降低误导性信息的风险。...9.问题精炼模式 问题精炼模式是一种迭代方法,其中根据语言模型的反馈不断优化输入的查询或提示。通过分析模型对不同提示的响应,开发人员可以微调查询,从而提高模型的性能。
有关设计模式、重构、编程规范等的经典书籍很多,有很多你应该已经听说过、甚至看过。今天,我就结合我的经验,对这些书籍进行一个整理和点评。...《重构与模式》 我们之前讲过,设计模式一个重要的应用场景就是代码重构。这本书主要讲如何应用设计模式来重构代码,改善代码设计。...如果说《重构》是讲如何做低层次的重构,那这本书就是在讲如何做高层次的重构,也就是我们专栏中要讲到的小重构和大重构。...《修改代码的艺术》 如果说《重构》那本书是从编码规范上来讲如何重构,《重构和模式》是从设计模式上来讲如何重构,那这本书可以粗鲁地归为从面向对象设计思想、设计原则上来讲重构。...我把自己十多年写代码的经验沉淀成这门代码提升课《设计模式之美》,内容设计紧贴工作中的开发场景,完全使用真实项目的代码讲解,涵盖了代码设计的方方面面,包括面向对象、设计原则、编码规范、重构技巧、设计模式等
重构系统的套路系列: 本篇说下重构系统的套路中的,明确重构的目的。 ?...不同的重构目的会有不同的重构方式和不同的执行标准。...,但是整个链路的可用性却降低了,贸然全量这样一个重构,必然产生一个非常大的事故。...,系统逻辑降级读db,造成了雪崩,整个数据库集群也被压倒,造成了一个重大事故。...上面这个虽然是我自己在系统梳理过程中意淫出来的场景,但我不得不再我进行类似系统重构之前,在代码逻辑角度,功能业务角度,缓存集群,mq集群,DB集群等角度考虑,我这次重构可能造成的问题,只有我们在系统重构之间能够想的比黑天鹅来的更快我们才能对系统做更多的保护
序 接触过许多工程,发现有一些基于maven的springboot工程还是使用maven的profile,有些"过时"了,下面简单介绍一下。...工程的用法 示例2 pom.xml <!...spring: profiles: active: @app.active@ 这种用法呢,src/main/resources下面只有一个application.yml,把profile的差异放到了...maven的profile中,在application.yml引用maven的profile变量,有点"少见多怪",直接application-{profile}.yml用不香吗。...小结 springboot工程已经提供了profile的特性了,其实大部分场景可以替换掉maven的profile,没必要在使用maven的profile了,不然总感觉显得有点古老和过时。
FPGA的重构有两种类型:完全的和部分的。完全重构将整个FPGA重新编程,而部分重构只取代设计的一部分,设计的剩下部分仍正常工作。部分重构不被视为完全重构的特殊情况,因为两者基本相同。...对FPGA执行部分重构通过使用与完全重构(JTAG、CAP或SelectMAP接口)相同的方法来进行,如上一节所述。比特流的结构对于完全和部分重构来说都是相同的。 FPGA重构具有以下几个优点。...基于分层的部分重构 与基于差异的重构不同,基于分层的部分重构流程支持重构大型部件FPGA设计。PlanAhead工具它提供了用于配置、实现和使用分层管理部分重构项目的集成环境。...Xilinx应用提示XAPP883提供了使用部分重构的示例,以允许嵌入式PCI Exress接口模块的快速配置。...动态重构端口 改变Xilinx GTX收发器、混合模式时钟管理器(MMCM)和System Monitor原语设置的另一种方法,是使用动态重构端口(DRP)DRP提供了一个简单的用户逻辑接口,不需要更多地了解配置寄存器和比特流结构
本文并非给微软打广告,完全是出于Windows从业者的一片善意提醒。...他没当回事,结果被入侵加密勒索了,加密的文件无法解密,他难受,我惋惜。...加强安全组设置、安装至少两种杀毒防护软件全盘深度查杀,千万不要设置弱密码 比如我自己用的密码我自己是记不住的,密码最后一个字母一定是小写字母(为了防止如果是大写,在vnc粘贴时会触发打开键盘Caps,...,但就是太敏感了,擦边球的访问和文件都给主动隔离掉,比如自己编译个程序在里面跑一下,它可能就主动隔离掉了,程序原位置也上锁了,不让继续存放被干掉的文件,我换个位置粘贴还是被干掉、加信任也不起作用,防护和拦截记录想删还删不掉...原因:wsl 1的linux 子系统内部因为内核完整性原因,是不能跑linux docker的,wsl 2虽然能跑linux docker但需要机器支持二次虚拟化,而普通云服务器不支持二次虚拟化,因此不论是
你不能阻挡别人的快乐是吧,但MYSQL会不会成为一个过时的数据库,这个问题 BELOW 1 MYSQL 由于本身的数据存储原理,一直改变不了单表数据存储容量小的这个问题,并且在达到一定量级后衰减的厉害...(查询性能和插入性能) 2 MYSQL 就算8.0算起,这也是一个和其他数据库引擎在数据库查询优化方面有硬伤的数据库,NEST LOOP, 不能多表JOIN ,增加索引,字段对于大表要用工具的事实。...不可否认MYSQL的确推动了互联网产业的发展,互联网和MYSQL互相成就,但现在和10年前不一样了,好用的数据库如雨后春笋一样,在不用掌握中间件知识,以及一些蹩脚的优化规则,使用其他数据库是可以好好的运转...10年前,MYSQL是开源数据库产业中的独树一帜,10年后已经淹没在众多花海中,ORDBMS , NEW SQL ,NO SQL , 混合型的数据库的涌现,好像MYSQL 变得随时可以被替换。...相关的产业也在改变,一些以数据库维护业务的公司也在转换观念,变化终究是生存之本,原有的市场格局的变化,必然导致新的数据库产品和服务的需求。
下面就用静态工厂+策略模式来重构这段代码(对于静态工厂模式和策略模式不知道的同学请自行百度哈 先说说思路:1、定义一个处罚的接口 ,包含一个执行处罚的方法 2、每一种情况的处罚都抽象成一个具体处罚类并继承处罚接口...(策略模式) 3、定义一个静态工厂类,用来根据情况生产具体处罚对象,然后执行处罚的方法(静态工厂模式)。...static void main(String[] agrs){ String state ="late"; punish(state); } //重构后的处罚逻辑...IPunish punish = PunishFactory.getPunish(state); //执行处罚逻辑 punish.exePunish(); } } 重构后的处罚逻辑简单...不过,运用静态工厂+策略模式,也存在弊端,那就是会增加很多类;但是,当每种情况的逻辑代码很多、很复杂的时候,那么这个弊端就可以忽略不计,其优势就完全展示出来了。
过时的方法: 此方法是在创建es索引,type后然后进行document字段定义时候使用 ? 替代的新方法: ?...这里多了一个XcontentType,也就是你前面的mappingSource的类型格式,以前项目中默认都是用的json,当然es也做了兼容,目前是这样兼容的。 ?...主要是根据你的内容再判断一次。 所以直接在setSource的时候,将第二个枚举类(XcontentType是一个枚举类)的参数写明就行。
随着网络架构、技术工具的发展,十多年前使用的一些技术已经退出大家的视野,今天来给大家分享几个曾经使用过的工具和技术,如今已经很少见了。 1、在 Burp 出来之前,如何截断文件名上传文件呢?...2、只有浏览器的情况下,如何修改当前网站的 cookie?...当时说的最多的就是旁注,从旁攻击,因为是虚拟主机,所以同一个服务器上搭建了多个网站,这些网站不会全部都安全,所以先通过一些信息收集手段,发现相同 IP 上部署的所有网站,然后一一测试,从而发现其中一个网站的漏洞...4、网络欺骗,嗅探场景,用的还多吗? 在旁注无效的情况下,如何获得目标权限呢?当时经常使用的方法,就是使用网络欺骗和嗅探的工具,大名顶顶的 cain 不知道大家还记得不?...长这样: 当年这个工具还是挺火的,既可以嗅探数据包、还能做 DNS 欺骗,还可以破解 windows 的哈希,如今大多数的网站都用上的了 HTTPS,云服务器之间做了很严格的隔离,这种通过欺骗和嗅探的方式
大型重构 1. Tease apart Inheritance 梳理并分解继承体系 某个继承体系同时承担两项责任 ,建立两个继承体系,并通过委托关系让其中一个可以调用另一个 . 2....Convert Procedural design to Objects 将过程化设计转化为对象设计 你手上有一些传统过程佛冈可选择代码 , 将数据记录变成对象,将大块的行为分成小块,并将行为移入相关对象之中...Separate Domain from from Presention 将领域和表述/显示分离 某些GUI类之中饮食了领域逻辑 , 将领域逻辑分离出来,为它们建立独立的领域类 4....Extract Hierarchy 提炼继承体系 你有某个类做了太多工作,其中一部分工作是以大量条件表达式完成的 , 建立继承体系,以一个子类表示一种特殊情况
Sprint,在这次的开发当中有些东西觉得还不错有总结分享的价值,所以整理成本文; 重构已是老生常谈的话题,我们或多或少对它有所了解但是对它的深刻理解恐怕需要一段实践过后才能体会到;提到重构就不得不提为它保驾护航的大功臣单元测试...; 2.1.2】公用的Mock行为 前面2.1.1】小结,我们讲了Mock接口对象的重构,这一节我们将来分析一下关于Mock对象行为的重构;在上面的IServiceConnection中我们加入了一个Open...,因为我们的项目中是需要迭代重构的,我们需要重构来为我们的项目保证最高的质量; 所以单元测试修改的次数和重构的次数应该是成1:0的这样的比例,修改的范围那就不是1:10了,有时候甚至是几何的倍数; OrderService...orderId) 20 { 21 return order.OrderId == orderId && this.IfOrderSubmitDt(order); 22 } 其实这很像企业架构模式中的规约模式...,将规则对象化后就能随便的控制他们,当然这里是提取出方法,如果是大型企业级项目对这些易变化的点是需要抽取出来的; 总之遇到这样的情况就使用简单的提取方法的方式将复杂的逻辑提取出来,这也是《重构》中的重构策略的首要的模式
阅读目录: 1.开篇介绍 2.不影响对象中的逻辑行为(枚举、常量、Entity子类来替代类型码) 3.影响对象中的逻辑行为(抽象出类型码,使用多态解决) 4.无法直接抽象出类型码(使用策略模式解决) 1...,那么我们就可以通过三个方式对它进行设计或者重构; 这里有一个小小问题的就是,如果我们正在进行一项局部DomainModel内部的重构时,我们的工作量会很大而且需要很好的单元测试来支撑;但是如果我们目前正在设计一个...;比如这里的EmployeeEntity,假设我们需要将某一个EmployeeEntity发送到某个消息队列,然后消息队列的后端程序需要将它直接插入到数据库中,这个时候,我们的DomainModel在消息队列的后端程序中是不存在的...,也就是说并没有和数据库映射过,这里的属性类型码将是和数据库等价的字符串;所以如果我们在选择使用枚举还是常量来替代类型码是,选择的标准就是类型码是否需要持久化,也就是字符串化; EmployeeEntity...Level的时候我们就会慢慢的陷入到判断分支的泥潭; 4】无法直接抽象出类型码(使用策略模式解决) 在3】节中,我们能很好的将类型码抽象出来,但是如果我们面临着一个重构项目时,我们很难去直接修改大面积的代码
序 接触过许多工程,发现有一些基于maven的springboot工程还是使用maven的profile,有些"过时"了,下面简单介绍一下。...工程的用法 示例2 pom.xml dev ...spring: profiles: active: @app.active@ 这种用法呢,src/main/resources下面只有一个application.yml,把profile的差异放到了...maven的profile中,在application.yml引用maven的profile变量,有点"少见多怪",直接application-{profile}.yml用不香吗。...小结 springboot工程已经提供了profile的特性了,其实大部分场景可以替换掉maven的profile,没必要在使用maven的profile了,不然总感觉显得有点古老和过时。
领取专属 10元无门槛券
手把手带您无忧上云