首页
学习
活动
专区
圈层
工具
发布

页面重构中的设计模式

页面重构中的设计模式 由 Ghostzhang 发表于 2014-07-02 02:40 查了下最开始的创建日期,竟然是2011年12月19日,这文章断断续续写了快3年,终于了算比较完整了,但可能相对还是写得有些简单了...,看不懂的同学欢迎给我留言,我尽量做补充。...原本是以为写成书的,所以看起来好像是有点那样,不过问了下相关人仕,好像至少也要5W字,而对于我的表达能力来说,硬要凑字数感觉还蛮难的,就不折腾了。...本地下载PDF 页面重构中的设计模式 from Ghost Zhang 以前写过的系列文章《 前言——页面重构中的设计模式 》,可以帮助理解,但需要注意的是,因为这期间有些想法上的变法,可能一些细节会不太一样...当然以最新的为准咯。

69150

JavaScript设计模式之终章:重构

重构 模式和重构之间有着一种与生俱来的关系。从某种角度来看,设计模式的目的就是为许多重构行为提供目标。...1 提炼函数 如果一个方法过长,不得不加上若干注释才能让这个函数显得易读一些,那这些函数就很有必要进行重构。 如果在函数中有一段代码可以被独立出来,那我们最好把这些代码放进另外一个独立的函数中。...而不必分别放到handleSuccess和handleFaild中。 3 条件分支提炼为函数 在上面的valid方法中,可能包含很复杂的逻辑。如果你把它写在btn的回调中,是很恶心的。...用《重构》里的话说,嵌套的条件分支往往是由一些深信“每个函数只能有一个出口的”程序员写出的。 实际上,如果对函数的剩余部分不感兴趣,那就应该立即退出。...因此不推荐在不稳定的业务中调用链式操作。 10 分解大型类 假如你的valid函数特别复杂,同样需要考虑用策略模式分解成插件的形式。不要将所有逻辑写到一个方法中。

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

    前言——页面重构中的设计模式

    前言——页面重构中的设计模式 由 Ghostzhang 发表于 2012-11-09 02:56 前不久开始写《页面重构中的设计模式》,本想着内容应该是蛮多的,可是到约9000字的时候,发现写不下去了...之前在写《[页面重构中的模块化设计][]》系列时就发现,只是讲模块化有点窄了,有些很重要但并不是模块化的内容放不进去,所以才会想说是不是需要一个更大的主题,正好也接触了下设计模式相关的内容,觉得可能会合适吧...在开始下面的内容之前,可以先了解下我对模块化的理解,不然后面的内容可能会看得云里雾里的: 页面重构中的模块化思维 页面重构中的组件制作要点 样式的作用域──页面重构中的模块化设计(一) 栏目级作用域──...页面重构中的模块化设计(二) 继承──页面重构中的模块化设计(三) 模块化的核心思想──页面重构中的模块化设计(四) 基类、扩展类──页面重构中的模块化设计(五) CSS模块的注释——页面重构中的模块化设计...当然说到设计模式,我们可能最先想到的就是“工厂模式”、“观察者模式”等程序上的解决方案,而我们的话题似乎有点不同。

    39130

    javascript中的Strict模式

    简介 我们都知道javascript是一个弱类型语言,在ES5之前,javascript的程序编写具有很强的随意性,我可以称之为懒散模式(sloppy mode)。...比如可以使用未定义的变量,可以给对象中的任意属性赋值并不会抛出异常等等。 在ES5中,引入了strict模式,我们可以称之为严格模式。相应的sloppy mode就可以被称为非严格模式。...严格模式并不是非严格模式的一个子集,相反的严格模式在语义上和非严格模式都发生了一定的变化,所以我们在使用过程中,一定要经过严格的测试。以保证在严格模式下程序的执行和非严格模式下的执行效果一致。...传统模式中,eval中定义的变量,将会自动被加入到包含eval的scope中。...让javascript变得更加安全 在普通模式下,如果我们在一个函数f()中调用this,那么this指向的是全局对象。在strict模式下,这个this的值是undefined。

    1.2K30

    javascript中的Strict模式

    简介 我们都知道javascript是一个弱类型语言,在ES5之前,javascript的程序编写具有很强的随意性,我可以称之为懒散模式(sloppy mode)。...比如可以使用未定义的变量,可以给对象中的任意属性赋值并不会抛出异常等等。 在ES5中,引入了strict模式,我们可以称之为严格模式。相应的sloppy mode就可以被称为非严格模式。...严格模式并不是非严格模式的一个子集,相反的严格模式在语义上和非严格模式都发生了一定的变化,所以我们在使用过程中,一定要经过严格的测试。以保证在严格模式下程序的执行和非严格模式下的执行效果一致。...传统模式中,eval中定义的变量,将会自动被加入到包含eval的scope中。...让javascript变得更加安全 在普通模式下,如果我们在一个函数f()中调用this,那么this指向的是全局对象。在strict模式下,这个this的值是undefined。

    1.3K30

    JavaScript 中的设计模式:创建模式

    在日常生活中,程序员在写代码的时候可能会遇到很多错误,自然而然的就会想出解决这些问题的方法。不同项目中不同打印机开发的解决方案彼此非常相似。这就是设计模式发挥作用的地方。...设计模式是软件开发人员在软件开发过程中面临的常见问题的解决方案。 让我们检查项目中的设计模式以便更好地理解: 它通常基于 OOP。但是无论语言和技术如何,它都可以使用。...我们在 3 个标题下收集设计模式: 创意图案 结构模式 行为模式 在本文中,我将讨论创建模式: 创建模式 它是一种用于创建和管理对象的模式。它们提供提高代码灵活性和可重用性的对象创建机制。...这也类似于SOLID原则中的“单一职责原则”。 示例:我们已经来到最后一个示例,我们将在其中使用 Person 对象。...我谈到了什么是设计模式,并试图用 JavaScript 代码解释创意模式。

    97410

    JavaScript 重构攻略

    JavaScript 是前台代码中重要组成部分,随着版本的延续,产品越做越大,JavaScript 层面的重构,需要在整个过程中逐步强化起来。...————————————————————————————————————– 三、JavaScript 的测试 进行 JavaScript 重构时,我希望引入易于使用的测试框架来保证重构的顺利进行,未来能持续通过测试代码对...JavaScript 中提供了闭包和原型两种办法来实现继承和多态,关于重构中应用这一点,后续的章节我再啰嗦吧。...原型链继承看起来似乎是最自然和最具亲和力的继承方式了,但是还记得上一节中对于单例模式的处理吗?...再多看一看,这个模式的核心是什么?接口!对,正是例子中的 Drawable 接口——正是在接口的规约和领导下,我们才能让画圆和画方都变得那么听话。

    2.1K20

    30 - JavaScript 中的严格模式​

    原文地址:https://dev.to/bhagatparwinder/strict-mode-in-javascript-4ge4 ES5 中引入严格模式,它是一种在写 JS 代码时强制使用严格模式的方法...代码提升 • 对象中不存在重复 key • 声明变量不使用 var 关键字 • 函数参数不存在重复参数 开启严格模式 • 文件级别: 在文件开头处添加 "use strict"。...let、var 或 const 去声明变量,JavaScript 中也不会有问题。...这样会强制使 JS 创建一个全局的属性,同时在应用中这样会导致一些问题(变量冲突或更改了全局属性)。 严格模式会通过抛出错误来解决此问题。 1....2 赋值给 a ,但是结果返回的是 7 而不是预期的 6 。严格模式下将会报语法错误。 1. 非严格模式下把 NaN 赋值给一个变量不会有错误反馈,而严格模式会抛出错误。

    76530

    JavaScript中的单例模式

    单例模式 是一种常见的设计模式,在应用这个模式时,必须保证单例对象的类只有一个实例存在;这样全局拥有一个对象,有利于我们进行系统调整。...把描述同一件事物的属性和方法放在同一段堆内存中,起到分组的作用,防止冲突;这样不同事物间即使属性名一样也不会发生冲突,这种分组的编写代码模式叫做单例模式;在单例模式中把对象名叫做命名空间。...单例模式是一种项目开发中经常使用的模式,可以使用单例模式进行模块化开发。...应用场景 当我们需要多人合作完成一个项目,但是有一些操作是同样的操作时(例如:点击按钮显示加载的遮罩层;例如:提交表单时的验证都是一样的),这个时候我们就需要单例模式。...缺点 我们可以通过操作直接对象中的属性改变了原有的值。 实例 有这样一个常见的需求,点击某个按钮的时候需要在页面弹出一个遮罩层。比如web.qq.com点击登录的时候.

    79230

    JavaScript中的Monorepos,反模式

    许多流行的开源项目采用这种模式,例如React、Parcel、Babel等等。笔者认为,在大多数情况下,这种模式对项目的危害要大于益处,它引入了不必要的复杂性,牺牲了作者和开发人员的可用性。...一个JavaScript monorepo项目通常会有这样的结构: myproject.git/ packages/ package-1/ package.json...现在有ESM模块 monorepos之前存在并拥有多个微包的原因之一是为了改进绑定,确保没有使用的功能不会绑定到应用程序中。Lodash这样的库很好地推广了这种模式。...如果有用户可以导入的可选文件,但又不希望用户必须引用特定的JavaScript文件,希望捆绑程序自动为环境选择正确的格式,那么使用单独的package.json就可以了。...结论 就像monorepos过度工程化并将太多的特性分离到包中一样,将代码分割到太多的存储库中也是如此。当一种模式比另一种模式更有意义时,没有什么灵丹妙药。

    2.1K00

    策略模式 在JavaScript中的实现

    策略模式(Strategy Pattern)是一种行为设计模式,它允许在运行时根据不同的情况选择不同的算法或行为。...该模式将算法封装成独立的 策略对象,使得这些策略对象可以互相替换,从而使得算法的变化独立于使用算法的客户端。 -- 来自查特著迪皮 需求 想要实现一个功能,点击不同按钮实现不同样式 原始代码 <!...也就是违背了 开放-封闭原则 (Open-Close Principle,OCP) 分析 以上问题就很适合使用 策略模式 在JavaScript中,策略模式可以通过以下方式理解: 定义策略对象:首先,你需要定义一组策略对象...因为以上过程只需要表示为 解决方案 1 普通对象 在JavaScript中,对象 object 天然具备 判断哪种策略 - 使用策略能力 对象[策略](); obj[key](); // 定义策略对象...传送门 可以看到,而已根据自身项目情况来考虑使用哪个版本的策略模式 以下提供优化后的代码 <!

    2K00

    JavaScript中几种常用的设计模式

    大家好,又见面了,我是你们的朋友全栈君。 设计模式:代码书写经验,为了应对各种场景,经过前人不断的总结,压缩,形成的一套又一套的代码的书写规范,形成了设计模式。...1.单例模式 单例模式是一种常用的设计模式,如果需要多次创建同一个对象,完成同一件事情,就会多次new出来很多个对象,而单例模式确保只有一个实例,并提供全局访问。...(唯一的),每次获取的都是一个东西,所以他 两相等 console.log(p1 === p2); 2.组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。...将多个对象的功能,组成起来,实现批量执行。使用这种模式可以用一条命令在多个对象上激发复杂的递归的行为。...,执行组合器的启动功能 c.action(); // 在内部,会自动执行所有已经组合起来的对象的功能 3.观察者模式 也称发布-订阅模式,定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时

    48410

    设计模式(11)-JavaScript中的注解之装饰器模式

    1 什么是装饰器模式? 装饰器模式模式动态地扩展了(装饰)一个对象的行为,同时又不改变其结构。在运行时添加新的行为的能力是由一个装饰器对象来完成的,它 "包裹 "了原始对象,用来提供额外的功能。...和适配器模式不同的是,适配器模式是原有的对象不能用了,而装饰器模式是原来的对象还能用,在不改变原有对象结构和功能的前提下,为对象添加新功能。...但是,JavaScript是一种动态语言,并且在运行时扩展对象的能力已融入该语言本身。 2 装饰器模式的主要参与者有哪些 ?...这是装饰器模式的经典实现,但是JavaScript本身的一些语法,就可以更有效的在运行时扩展对象,所以在实际开发中我们一般不会用到这种方法。日志函数用来记录和显示结果。 <!...decorator 在ES7中提供了一种类似于java注解的语法糖来实现装饰器模式。

    1.1K31

    设计模式(3)-JavaScript中的构造函数模式是什么?

    1 什么是构造函数模式 构造函数用于创建特定类型的对象一不仅声明了使用的对象,构造函数还可以接受参数以便第一次创建对象的时候设置对象的成员值。...你可以自定义自己的构造函数,然后在里面声明自定义类型对象的属性或方法。在JavaScript里,构造函数通常是认为用来实现实例的,JavaScript没有类的概,但是有特殊的构造函数。...通过new关键字来调用自定义的构造函数,在构造函数内部,this关键字引用的是新创建的对象。 2 构造函数模式的作用和注意事项 2.1 模式作用 1.用于创建特定类型的对象。...__proto__ = Person.prototype; 3 将步骤1新创建的对象作为this的上下文 ;//Person.call(o); 3 执行构造函数中的代码(为这个新对象添加属性); 4...如果该函数没有返回对象,则返回this(新对象); 在前面例子中,xiaoMing和xiaoZhang分别保存着Person的不同实例。

    1.4K41

    【JS】285- 拆解 JavaScript 中的异步模式

    JvaScript 中的各种异步模式 Callback 我们知道在 JavaScript 中,函数是一等公民,当一个函数传入另外一个函数当作参数时,我们就可以把这个函数叫做 Callback 函数。...很长一段时间里,我都把 Async 函数当作是 JavaScript 中处理异步最完美的方案。...不过最近我参与到一个 IM 系统的开发中,前端的交互和逻辑相比较而言还有些复杂,通常一个地方的改变意味着其它几个地方需要跟着同步改变,在开发中也会明显感觉到往常习惯的一些模式虽然也可以用,但是觉得代码写得并不足够清晰...也许在熟悉了各种异步模式后,遇到了具体的问题,第一时间想到的就会是最合适的方式。 JS 中是怎么实现异步的 前面我们提到,在 Promise 之前,JavaScript 语言本书是没有异步这个概念的。...比如说我们常用的 setTimeout 等api 实际上是由 JavaScript 的运行环境提供的,其存在于 html Timers 相关标准中。

    1.1K21

    【JS】336- 拆解 JavaScript 中的异步模式

    JvaScript 中的各种异步模式 Callback 我们知道在 JavaScript 中,函数是一等公民,当一个函数传入另外一个函数当作参数时,我们就可以把这个函数叫做 Callback 函数。...很长一段时间里,我都把 Async 函数当作是 JavaScript 中处理异步最完美的方案。...不过最近我参与到一个 IM 系统的开发中,前端的交互和逻辑相比较而言还有些复杂,通常一个地方的改变意味着其它几个地方需要跟着同步改变,在开发中也会明显感觉到往常习惯的一些模式虽然也可以用,但是觉得代码写得并不足够清晰...也许在熟悉了各种异步模式后,遇到了具体的问题,第一时间想到的就会是最合适的方式。 JS 中是怎么实现异步的 前面我们提到,在 Promise 之前,JavaScript 语言本书是没有异步这个概念的。...比如说我们常用的 setTimeout 等api 实际上是由 JavaScript 的运行环境提供的,其存在于 html Timers 相关标准中。

    1K30

    JavaScript中的MVC,MVP和MVVM模式剖析

    JavaScript的UI设计模式,主流上可以分为MVC,MVP和MVVM,本文主要剖析这三种模式的异同。...在MVC模式中,除了Controller可以访问Model,View也允许直接访问Model(Model不依赖View,但是View依赖Model)。...因此,View中可能含有一些业务逻辑,导致View的可重用性降低。 2). MVP mvp.png Presenter 它负责处理View上各类UI事件。...Presenter与View通过定义好的接口交互,是一种低耦合模式。 MVP与MVC最大的不同,在于Model和View完全隔离开,两者必须通过Presenter进行通信。...一般,ViewModel中的属性都实现了一些监听器/观察器,用于View或者Model的同步刷新。 大多数情况,MVVM模式需要依赖具体的平台或者技术实现,比如Vue.js。

    1.1K20

    用CodeBuddy重构老旧的JavaScript工具类

    这篇文章我就来分享一下,我是如何借助 CodeBuddy在 来完成老旧的JavaScript工具类的重构的。...兼容 二、工具与场景配置 AI 工具:CodeBuddy 项目环境: 语言:ECMAScript 模块系统:ES Modules 依赖:无框架依赖(纯 JavaScript) 测试方式:Node.js...CodeBuddy 生成的重构代码 /** * 工具类集合 - 日期与字符串处理 * @module utils */ /** * 日期处理工具集 */ export const DateUtils...== ''); // 额外过滤空项 } 四、最终效果 五、总结 对我们开发人员来说,重构不是简单的代码美化,而是对知识资产的重新整合。就像整理书房,表面是清理杂物,本质是建立高效的知识检索系统。...当然在进行的过程中,我们需要学会接受不完美,认识到重构是持续过程,不是一次性任务。毕竟技术和知识都在进步。好了,今天的分享就到这里了。我们下篇见咯!

    23710
    领券