首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

代码重构:用工厂+策略模式优化过多if else代码

在工作中优化了一段冗余if else代码: 假如写一个针对员工上班不遵守制度做相应惩罚程序,比如,上班迟到:罚100;上班睡觉:罚1000;上班早退:警告;上班玩游戏:严重警告;上班谈恋爱:开除等...下面就用静态工厂+策略模式来重构这段代码(对于静态工厂模式和策略模式不知道同学请自行百度哈 先说说思路:1、定义一个处罚接口 ,包含一个执行处罚方法       2、每一种情况处罚都抽象成一个具体处罚类并继承处罚接口...implements IPunish { public void exePunish() { // Empty class } } } 重构后...static void main(String[] agrs){ String state ="late"; punish(state); } //重构处罚逻辑...IPunish punish = PunishFactory.getPunish(state);      //执行处罚逻辑 punish.exePunish(); } } 重构处罚逻辑简单

51321

重构react组件引发函数式编程思考

对于高阶组件使用场景如果有相关经验或者有不同见解希望能够在文末留言 最近在重构react组件时,学习了一些高阶组件编写思路,其实是由高阶函数沿伸而来。...一般情况我们编写一个react组件大致样子如下: class App extends Component { constructor(props){} life cycle(){}...个人理解高阶组件就是react中复用组件逻辑一种技巧,先来个高阶函数压压惊: function add(a,b){ return a+b } 如果我希望在函数处理过程中能够实时追踪这个值并且打印出来呢...return } } } 其实写到这里高阶函数究竟好在哪里我还没有体会出来,如果说对于一个组件而言我们将view层和逻辑层代码当成参数传递进去...state,但是要注意就是小心会覆盖父类中方法,其实这种方式也可以通过import一个组件方式来引入父类。

86030
您找到你想要的搜索结果了吗?
是的
没有找到

使用concent,渐进式重构react应用吧

点击保存,将用户字段配置存储到后端,用户下次再次使用查看该表格时,使用已配置显示字段来展示。...: concent, power your react 准备工作 产品同学期望快速见到一般效果原型,而我希望原型是可以持续重构和迭代基础代码,当然要认真对待了,不能为了交差而乱写一版,所以要快速整理需求并开始准备工作了...[ui布局] 因为这个弹窗组件在不同页面被不同table使用,传入列定义数据是不一样,所以我们使用事件方式,来触发打开弹窗并传递表格id,打开弹窗后获取该表格所有字段定义,以及用户针对表哥已选择字段数据...,该函数只会在初次渲染前调用一次。...,concent一样能够正常运作,但是由于concent提供完善插件机制,为啥不利用社区现有的优秀资源呢,重复造无意义轮子很辛苦滴(⊙﹏⊙)b......

1.9K261

一文看懂如何使用 React Hooks 重构小程序!

简单来说,Hooks 就是一组在 React 组件中运行函数,让你在不编写 Class 情况下使用 state 及其它特性。...然后用 ES6 结构语法把它俩解构出来使用。 然后我们在定义一个增加函数,把他绑定到 onClick 事件上。...在 taro 1.3 我们对 props 系统进行了一次重构,Taro context 和 props 一样,属性传递没有任何限制,想传啥就传啥。...当然我们也把 react-redux@7新功能移植到了@tarojs/redux,在Taro 1.3版本你可以直接使用这几个API。...我们还知道另外一条规则,Hooks 是 React 函数内部函数,于是我们就可以知道,要实现 Hooks 最关键问题在于两个: 找到正在执行 React 函数 找到正在执行 Hooks 顺序。

1.9K40

使用React.memo()来优化React函数组件性能

推荐理由: 本文讲述了开发React应用时如何使用shouldComponentUpdate生命周期函数以及PureComponent去避免类组件进行无用重渲染,以及如何使用最新React.memo...虽然类组件是React应用主要组成部分,不过函数组件(Functional Component)同样可以被作为React组件使用。...,它们没有诸如state东西去保存它们本地状态(虽然在React Hooks中函数组件可以使用useState去使用状态), 所以我们不能像在类组件中使用shouldComponentUpdate等生命函数去控制函数组件重渲染...这就是React.memo(...)这个函数牛X地方! 在我们之前那个没用到 React.memo(...)例子中,count重复设置会使组件进行重新渲染。...结论 以下是几点总结: React.PureComponent是银 React.memo(...)是金 React.PureComponent是给ES6类组件使用 React.memo(...)是给函数组件使用

1.9K00

改善你代码:使用这5种重构技术

可以使用以下建议来实现这个目的: 专门分配时间来重构代码 将较大重构问题分解为较小问题以进行管理 尝试让整个团队参与重构过程 使用自动化工具,可以帮助您查找常见重构错误 提取方法 这种方法涉及将代码转换为单独方法...这样做是为了提高代码结构和可读性。通过提取较长且复杂代码,将其变成更小且易于管理方法来实现这一目标。 要使用这种技术,我们首先需要找到一个执行特定任务代码,这些任务有点复杂。...重复代码可能导致多种问题,包括增加维护成本、难以对代码库进行更改以及引入错误风险更高。 在重构代码时,必须注意查找重复代码。...此方法可以分解为较小代码,可以在函数中找到它们以进行优化。...以下是这些代码: 删除不必要变量和表达式:可能有一些用于调试变量或表达式被遗漏,例如JavaScript中console.log。 使用内置功能:有时使用库或语言内置功能会更好。

24920

重构】 代码坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大类 | 过长参数列 | 发散式变化 | 霰弹式修改)

重复代码 (Duplicated Code) 用到重构方法简介 : Extract Method(提炼函数), Pull Up Method(函数上移), From Template Method(塑造模板函数...将相关函数 和 字段 从旧类搬移到新类; 重复代码坏处 : 重复代码结构使程序变得冗长, 这个肯定要优化, 不解释; 同类函数重复代码 : 同一个类中 两个函数 使用了相同表达式; -- 解决方案...: 使用 Extract Method(提炼函数) 方法提炼出重复代码, 两个函数同时调用这个方法, 代替使用相同表达式; 兄弟子类重复代码 : 一个父类有两个子类, 这两个子类中存在相同表达式...: 如果模板中函数算法有差异, 可以选择比较清晰一个, 使用Substitute Algorithm(替换算法) 将不清晰算法替换掉; 不相干类出现重复代码 : 使用Extract Class(..., 也要将其提炼到函数中; -- 条件表达式 : 当 if else 语句, 或者 while 语句条件表达式过长时候, 可以使用Decompose Conditional(分解条件表达式) 方法,

56110

React移动web极致优化

转换之后,可以通过QQ群加号面板,或者群资料卡进入。 最近一个季度,我们都在为手Q家校群做重构优化,将原有那套问题不断框架换掉。经过一些斟酌,决定使用react 进行重构。...但vd是通过看数据前后差异去判断是否要重复渲染,但React并没有帮助我们去做这层比较。因此我们需要使用一整套数据管理工具及对应优化方法去达成。在这方法,我们选择了Redux。...但放到移动端上,我们在列表页重构时候就马上遇到卡顿问题了。 什么原因呢?是重复渲染导致!!!!!! 说好React vd可以减少重复渲染呢?!!! 请别忘记前提条件!!!!...请将方法bind一律置于constructor Componentrender里不动态bind方法,方法都在constructor里bind好,如果要动态传参,方法可使用闭包返回一个最终可执行函数。...在重构手Q家校群布置页时候,我们有不少浮层,列表有布置页内容主浮层、同步到多群浮层、科目管理浮层以及指定群成员浮层。这些完全可以使用react-router进行管理。

1.4K80

React 移动 web 极致优化

image.png 引言 最近一个季度,我们都在为手Q家校群做重构优化,将原有那套问题不断框架换掉。经过一些斟酌,决定使用react 进行重构。...但vd是通过看数据前后差异去判断是否要重复渲染,但React并没有帮助我们去做这层比较。因此我们需要使用一整套数据管理工具及对应优化方法去达成。在这方法,我们选择了Redux。...但放到移动端上,我们在列表页重构时候就马上遇到卡顿问题了。 什么原因呢?是重复渲染导致!!!!!! 说好React vd可以减少重复渲染呢?!!! 请别忘记前提条件!!!!...请将方法bind一律置于constructor Componentrender里不动态bind方法,方法都在constructor里bind好,如果要动态传参,方法可使用闭包返回一个最终可执行函数。...在重构手Q家校群布置页时候,我们有不少浮层,列表有布置页内容主浮层、同步到多群浮层、科目管理浮层以及指定群成员浮层。这些完全可以使用react-router进行管理。

99450

代码重构(四):条件表达式重构规则

一般拆分规则为:经if后复杂条件表达式进行提取,将其封装成函数。如果if与else语句内容比较复杂,那么就将其提取,也封装成独立函数,然后在相应地方进行替换。...下方代码段就是我们将要重构代码段。因为本篇博客主题是对条件表达式重构,所以我们要对象下方if-else代码进行重构。至于下方代码片段中其他不规范以及需要重构地方我们暂且忽略。...当然,我们这个Demo条件表达式不够复杂,并且if和else逻辑所做东西不多。不过我们可以假设一下,如果在比较复杂情况下,这种重构手法是比较实用。具体大家就看重构前与重构区别吧。...在开发中是比较忌讳重复代码,如果出现重复代码,那么说明你代码应该被重构了。    下方代码片段中if与else中有着相同语句,就是这个print语句。...在真正项目中,如果你要提取重复代码段一般还要结合着其他重构手法,比如将重复部分先提取成一个独立模块(独立类或者方法),然后在条件中使用,最后再去重复话。这样一来,重构思路就比较清晰了。

1.5K90

React】1981- React 8 种条件渲染方法

Switch Case 语句 误差边界 高阶组件 (HOC) 渲染道具 让我们深入它们使用方法,我们现在开始吧。 01、If/Else 语句 传统 if/else 语句用于分支逻辑。...它们帮助根据条件是真还是假来执行代码某些部分。这是一种根据条件控制流量简单方法。 if/else 语句检查条件:如果条件为真,则运行“if”代码。否则,“else将运行。...05、Switch Case 语句 “switch”语句评估表达式并执行相关“case”,匹配表达式值。它非常适合在 React 中导致不同渲染多种条件,确保代码有组织且可读。...以下是一些指导您决策过程最佳实践: If/Else 语句:使用传统 if/else 语句进行简单分支逻辑,例如基于单个条件渲染组件。这种方法简单易读。...如果您发现自己这样做,这可能表明您应该重构为单独组件或使用更合适方法,例如 if 语句或创建特定渲染函数

7610

照方抓药 - 重构 React 组件实用清单

函数:没有副作用,并针对相同输入有相同输出 Q: 为什么要优化、重构?...3.是否可以重用 相同/相似 逻辑 重复纯 逻辑/计算 可提取成工具方法,并用可选参数实现通用 涉及界面的重复可封装成通用组件,并用可选 props 实现通用 相似的其他组件,可将差异部分提取为...编写测试 针对重构组件,可以轻易编写单元测试了 若编写测试仍遇到问题,重复检查以上所有步骤 重构案例:秒杀商品详情弹窗 用一个小例子来实践这份清单,虽然不可能每次重构都把上面的 checkbox...总结 对于 UI 组件,无论是作为一种特殊 OOP 实现,或是采纳函数组合提纯,都需要尽量减少对外部依赖、排除改变参数或全局变量副作用,并尽可能拥有唯一职责。...总之,重构并非锦上添花,而是软件开发过程中必不可少工作。

1.5K20

一份 2.5k star React 开发思想纲领》

介绍 《React 开发思想纲领》是: 我开发 React一些思考 每当我 review 他人或自己代码时自然而然会思考东西 仅仅作为参考和建议,并非严格要求 会随着我经验不断更新 大多数技术点是基础重构方法论...来看看这些容易发现代码异味 ❌ 定义了很多参数函数或方法 ❌ 难以理解,返回 Boolean 值逻辑 ❌ 单个文件中代码行数太多 ❌ 在语法上可能相同(但格式化可能不同)重复代码 ❌ 可能难以理解函数或方法...❌ 定义了大量函数或方法类/组件 ❌ 单个函数或方法中代码行数太多 ❌ 具有大量返回语句函数或方法 ❌ 不完全相同但代码结构类似的重复代码(比如变量名可能不同) 切记,代码异味并不一定意味着代码需要修改...,链式高阶函数更优雅 如果没有明显性能差异,尽量使用链式高阶函数(map, filter, find, findIndex, some等) 来代替传统循环语句。...如果你正在重构某个代码,且最后实现功能都是完全一致,其实几乎不需要修改测试,而且可以通过测试结果来判定你正确重构了。 对于前端来说,不需要 100% 测试覆盖率,70% 就足够了。

79020

代码质量--可重用代码

可重用代码指:在相似业务场景下,用是同一份代码。 可重用代码可以减少重复劳动。一个软件中,会有很多类似的业务场景。将这些场景抽象成可重用代码。开发新功能时,重用代码可减少重复劳动。...考虑这样场景:代码A功能是获取接口数据,并渲染UI。代码BUI和A一样,但获取接口数据不一样。代码C获取数据和A一样,但UI和A不一样。A,B,C之间代码都不能被复用。...如下是React实现新闻列表: import React from 'react' import s from './style.scss' import Item, {IItem} from '....(四)工具函数 工具函数是与业务无关。如:格式化日期,生成唯一id等。Lodash和 moment.js包含了很多工具方法。 二、总结 要写出可重用代码,本质就是识别和分离出可复用部分。...前端可以从UI展示,接口调用,业务流程,数据,工具函数中找出可复用部分。 代码质量下一层次就是:可重构代码。我会在下一篇文章中介绍。

13530

REACT框架学习心得

这个教程可以说是把react轮廓放到了大家面前,并且这个代码也可以fork一份直接用到自己移动端项目上,PC端还需要把REM取消后使用。   ...(Domain data)和应用状态数据(App state)定义 State,而不是用 UI 状态(UI state) Reducer重构介绍中一个核心概念需要理解,就是函数分解,在redux重构中又分为...工具函数/业务逻辑/高阶函数 三种拆分技巧 建议仔细看下redux重构技巧,中文翻译版本在此,英文好建议看原版。...进一步探索 其实我这里想说就是react最佳实践东西,确切来说就是组件拆分这一,我感觉用react很重要进阶就是知道什么时候使用无状态组件,如何合理拆分组件,其实比函数分解都难,尤其在实际业务中还会有越拆越麻烦现象发生...另一方面还要探索react各种库使用和实现,毕竟作为工程师,实现需求是最重要,包括但不限于各种UI库引入,比如最新iceworks代码生成学习,这都是提高REACT水平良好机会,在此奉上

1.1K70

React 组件进行单元测试

React 单元测试中用到工具 III. 用测试驱动 React 组件重构 IV. React 单元测试常见案例 I....对于一些组件和共有函数等,完善测试也是一种最好使用说明书。...再次运行测试;如果能成功则跳到步骤5,否则重复步骤3 重构已经通过测试代码,使其更可读、更易维护,且不影响通过测试 重复步骤1 解读测试覆盖率 这就是 jest 内置 istanbul 输出覆盖率结果...表格中第2列至第5列,分别对应四个衡量维度: 语句覆盖率(statement coverage):是否每个语句都执行了 分支覆盖率(branch coverage):是否每个if代码都执行了 函数覆盖率...所谓异步操作,在不考虑和 ajax 整合集成测试情况下,一般都是指此类操作,只用 setTimeout 是不行,需要搭配 done 函数使用: //组件中const Comp = (props)

4.2K40

代码质量第2层-可重用代码!

可重用代码指:在相似业务场景下,用是同一份代码。 可重用代码可以减少重复劳动。一个软件中,会有很多类似的业务场景。将这些场景抽象成可重用代码。开发新功能时,重用代码可减少重复劳动。...考虑这样场景:代码A功能是获取接口数据,并渲染UI。代码BUI和A一样,但获取接口数据不一样。代码C获取数据和A一样,但UI和A不一样。A,B,C之间代码都不能被复用。...如下是React实现新闻列表: import React from 'react'import s from '....(四)工具函数 工具函数是与业务无关。如:格式化日期,生成唯一id等。Lodash和 moment.js包含了很多工具方法。 二、总结 要写出可重用代码,本质就是识别和分离出可复用部分。...前端可以从UI展示,接口调用,业务流程,数据,工具函数中找出可复用部分。 代码质量下一层次就是:可重构代码。我会在下一篇文章中介绍。  推荐阅读 代码质量第3层-可读代码!

80320
领券