返回顶部
首页 > 资讯 > 精选 >js前端设计模式如何优化50%表单
  • 289
分享到

js前端设计模式如何优化50%表单

2023-07-02 11:07:59 289人浏览 独家记忆
摘要

本篇内容主要讲解“js前端设计模式如何优化50%表单”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js前端设计模式如何优化50%表单”吧!表单校验背景假设我们正在编写一个注册页面,在点击注册按钮

本篇内容主要讲解“js前端设计模式如何优化50%表单”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js前端设计模式如何优化50%表单”吧!

    表单校验

    背景

    假设我们正在编写一个注册页面,在点击注册按钮之时,有如下几条校验逻辑:

    • 用户名不能为空

    • 密码长度不能少于6位

    • 手机号码必须符合格式

    常规写法:

    const fORM = document.getElementById('reGISterForm');form.onsubmit = function () {  if (form.userName.value === '') {    alert('用户名不能为空');    return false;  }  if (form.passWord.value.length < 6) {    alert('密码长度不能少于6位');    return false;  }  if (!/^1[3|5|8][0-9]{9}$/.test(form.phoneNumber.value)) {    alert('手机号码格式不正确');    return false;  }  ...}

    这是一种很常见的代码编写方式,但它有许多缺点:

    • onsubmit 函数比较庞大,包含了很多 if-else 语句,这些语句需要覆盖所有的校验规则。

    • onsubmit 函数缺乏弹性,如果增加了一种新的校验规则,或者想把密码的长度从6改成8,我们都必须深入 obsubmit 函数的内部实现,这是违反开放-封闭原则的。

    • 算法的复用性差,如果在项目中增加了另外一个表单,这个表单也需要进行一些类似的校验,我们很可能将这些校验逻辑复制得漫天遍野。

    如何避免上述缺陷,更优雅地实现表单校验呢?

    策略模式介绍

    策略模式是一种行为设计模式, 它能让你定义一系列算法, 把它们一个个封装起来, 并使它们可以相互替换。

    真实世界类比

    js前端设计模式如何优化50%表单

    假如你需要前往机场。 你可以选择骑自行车、乘坐大巴或搭出租车。这三种出行策略就是广义上的“算法”,它们都能让你从家里出发到机场。你无需深入它们的内部实现细节,如怎么开大巴、公路系统如何确保你家到机场有通路等。你只需要了解这些策略的各自特点:所需要花费的时间与金钱,你就可以根据预算和时间等因素来选择其中一种策略。

    更广义的“算法”

    在实际开发中,我们通常会把算法的含义扩散开来,使策略模式也可以用来封装一系列的“业务规则”。只要这些业务规则指向的目标一致,并且可以被替换使用,我们就可以用策略模式来封装它们。

    策略模式的组成

    一个策略模式至少由两部分组成。

    第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。

    第二个部分是环境类 Context,Context 接受客户的请求,随后把请求委托给某一个策略类。

    利用策略模式改写

    定义规则(策略),封装表单校验逻辑:

    const strategies = {  isNonEmpty: function (value, errMsg) {    if (value === '') {      return errMsg;    }  },  minLenth: function (value, length, errMsg) {    if (value.length < length) {      return errMsg;    }  },  isMobile: function (value, errMsg) {    if (!/^1[3|5|8][0-9]{9}$/.test(value)) {      return errMsg;    }  }}

    定义环境类 Context,进行表单校验,调用策略:

    form.onsubmit = function () {const validator = new Validator();validator.add(form.userName, 'isNonEmpty', '用户名不能为空');validator.add(form.password, 'minLength:6', '密码长度不能少于6位');validator.add(form.phoneNumber, 'isMobile', '手机号码格式不正确');const errMsg = validator.start();if (errMsg) {alert(errMsg);return false;}}

    Validator 类代码如下:

    class Validator {constructor() {this.cache = [];}add(dom, rule, errMsg) {const arr = rule.split(':');this.cache.push(() => {const strategy = arr.shift();arr.unshift(dom.value);arr.push(errMsg);return strategies[strategy].apply(dom, arr);})}start() {for (let i = 0; i < this.cache.length; i++) {const msg = this.cache[i]();if (msg) return msg;}}}

    使用策略模式重构代码之后,我们消除了原程序中大片的条件分支语句。我们仅仅通过“配置”的方式就可以完成一个表单校验,这些校验规则也能在程序中任何地方复用,还能作为插件的形式,方便地移植到其他项目中。

    策略模式优缺点

    优点:

    • 可以有效地避免多重条件选择语句。

    • 开放-封闭原则完美支持,将算法封装在独立的 strategy 中,使得它们易于切换,易于理解,易于扩展。

    • 可以使算法复用在系统的其他地方,避免许多重复的复制粘贴工作。

    缺点:

    • 使用策略模式会在程序中增加许多策略类或策略对象

    • 要使用策略模式,必须了解所有的 strategy,了解它们的不同点,我们才能选择一个合适的 strategy。这是违反最少知识原则的。

    策略模式适合应用场景

    当你想使用对象中各种不同的算法变体, 并希望能在运行时切换算法时, 可使用策略模式。

    策略模式让你能够将对象关联至可以不同方式执行特定子任务的不同子对象, 从而以间接方式在运行时更改对象行为。

    当你有许多仅在执行某些行为时略有不同的相似类时, 可使用策略模式。

    策略模式让你能将不同行为抽取到一个独立类层次结构中, 并将原始类组合成同一个, 从而减少重复代码。

    如果算法在上下文的逻辑中不是特别重要, 使用该模式能将类的业务逻辑与其算法实现细节隔离开来。

    策略模式让你能将各种算法的代码、 内部数据和依赖关系与其他代码隔离开来。 不同客户端可通过一个简单接口执行算法, 并能在运行时进行切换。

    当类中使用了复杂条件运算符以在同一算法的不同变体中切换时, 可使用该模式。

    策略模式将所有继承自同样接口的算法抽取到独立类中, 因此不再需要条件语句。 原始对象并不实现所有算法的变体, 而是将执行工作委派给其中的一个独立算法对象。

    到此,相信大家对“js前端设计模式如何优化50%表单”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: js前端设计模式如何优化50%表单

    本文链接: https://lsjlt.com/news/341538.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • js前端设计模式如何优化50%表单
      本篇内容主要讲解“js前端设计模式如何优化50%表单”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js前端设计模式如何优化50%表单”吧!表单校验背景假设我们正在编写一个注册页面,在点击注册按钮...
      99+
      2023-07-02
    • js前端设计模式优化50%表单校验代码示例
      目录表单校验背景常规写法:策略模式介绍真实世界类比更广义的“算法”策略模式的组成利用策略模式改写策略模式优缺点优点:缺点:策略模式适合应用场景总结表单校验 背...
      99+
      2024-04-02
    • JS前端设计模式之发布订阅模式详解
      目录引言例子1:version1:version2:总结引言 昨天我发布了一篇关于策略模式和代理模式的文章,收到的反响还不错,于是今天我们继续来学习前端中常用的设计模式之一:发布-订...
      99+
      2022-11-13
      JS发布订阅模式 JS前端设计模式
    • JS前端首屏如何优化
      这篇文章主要介绍“JS前端首屏如何优化”,在日常操作中,相信很多人在JS前端首屏如何优化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS前端首屏如何优化”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!打包...
      99+
      2023-07-02
    • JS前端中的设计模式和使用场景示例详解
      目录引言策略模式1.绩效考核2.表单验证策略模式的优缺点:代理模式1.图片懒加载:2.缓存代理总结引言 相信大家在日常学习和工作中都多多少少听说/了解/使用过 设计模式,我们都知道,...
      99+
      2022-11-13
      JS前端设计模式场景 前端设计模式使用场景
    • 如何实现单例设计模式
      这篇文章主要讲解了“如何实现单例设计模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现单例设计模式”吧! 单例模式单例模式(Singleton Pattern)是 Java...
      99+
      2023-06-15
    • Java设计模式的单例模式如何实现
      这篇文章主要介绍了Java设计模式的单例模式如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java设计模式的单例模式如何实现文章都会有所收获,下面我们一起来看看吧。单例模式单例模式顾名思义就是单一的实例...
      99+
      2023-06-29
    • 如何理解Java设计模式的单例模式
      这篇文章主要讲解了“如何理解Java设计模式的单例模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Java设计模式的单例模式”吧!一、什么是单例模式单例模式是一种常用的软件设计模式...
      99+
      2023-06-25
    • java设计模式中如何实现单例模式
      这篇文章将为大家详细讲解有关java设计模式中如何实现单例模式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下面是一个简单的小实例://简单懒汉式 public class ...
      99+
      2023-05-30
      java
    • 如何实现网站Web端表单的交互式设计
      这篇文章主要介绍“如何实现网站Web端表单的交互式设计”,在日常操作中,相信很多人在如何实现网站Web端表单的交互式设计问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何实现网站Web端表单的交互式设计”的疑...
      99+
      2023-06-10
    • 如何使用设计模式系列之单例模式
      这篇文章主要介绍“如何使用设计模式系列之单例模式”,在日常操作中,相信很多人在如何使用设计模式系列之单例模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用设计模式系列...
      99+
      2024-04-02
    • JavaScriptwebpack模块打包器如何优化前端性能
      目录一、webpack的使用背景二、webpack如何优化1. JS代码压缩2.CSS代码压缩3. HTML文件压缩4. 文件大小压缩5. 图片压缩6. Tree Shaking7....
      99+
      2022-11-13
      JavaScript webpack JavaScript webpack优化性能
    • 如何使用设计模式优化 PHP 函数的架构和性能?
      通过应用设计模式,例如单例模式、观察者模式和工厂模式,可以优化 php 函数的架构和性能,包括:单例模式:确保类只有一个实例,提高全局资源访问效率。观察者模式:允许对象通知多个观察者事件...
      99+
      2024-04-25
      设计模式 php 函数
    • web开发中如何实现单态设计模式
      这篇文章主要为大家展示了“web开发中如何实现单态设计模式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web开发中如何实现单态设计模式”这篇文章吧。 ...
      99+
      2024-04-02
    • 如何实现MySQL底层优化:表设计规范与性能优化技巧
      如何实现MySQL底层优化:表设计规范与性能优化技巧在数据库管理系统中,MySQL是一种常用的关系型数据库。在开发过程中,合理设计数据库表结构和优化数据库性能至关重要。本文将从表设计规范和性能优化技巧两个方面,介绍如何实现MySQL底层优化...
      99+
      2023-11-08
      性能优化技巧 表设计 底层优化 MySQL底层优化关键词:MySQL
    • 如何使用响应式设计优化ASP编程算法?
      在现代Web开发中,响应式设计是一种非常流行的设计方法。响应式设计可以使网站适应不同的设备,包括移动设备,平板电脑和桌面电脑。在本文中,我们将探讨如何使用响应式设计优化ASP编程算法。 ASP(Active Server Pages)是一种...
      99+
      2023-08-27
      编程算法 响应 shell
    • 如何使用PHP7的匿名类实现简单的单例设计模式?
      如何使用PHP7的匿名类实现简单的单例设计模式?在PHP开发中,单例设计模式被广泛应用于需要确保类的实例只存在一个的场景。而PHP7引入的匿名类使得实现单例模式变得更加简单和优雅。本文将介绍如何利用PHP7的匿名类来实现简单的单例设计模式,...
      99+
      2023-10-22
      PHP 匿名类 单例设计模式
    • 如何使用php函数来优化响应式设计的实现?
      随着移动设备的普及,响应式设计已成为网页开发的重要技术之一。在实现响应式设计时,使用 PHP 函数可以帮助我们更好地处理不同设备的请求,提升用户体验和网页性能。本文将介绍如何使用 PHP 函数来优化响应式设计的实现,并提供具体的代码示例。检...
      99+
      2023-10-21
      优化 PHP函数 响应式设计
    • 如何在 Go 语言中优化响应式设计的并发 IDE?
      Go 语言是一种高效的编程语言,它以其良好的并发性能和卓越的性能而著名。在开发响应式设计的并发 IDE 时,使用 Go 语言可以实现高效的并发处理,提高 IDE 的响应速度和用户体验。 使用 Go 协程实现并发 在编写响应式设计的并发 ...
      99+
      2023-11-13
      响应 ide 并发
    • 如何设计一个优化的MySQL表结构来实现数据统计功能?
      如何设计一个优化的MySQL表结构来实现数据统计功能?在实际的软件开发中,数据统计是一个非常常见且重要的功能。而MySQL作为一种常用的关系型数据库管理系统,其表结构设计的优化对于数据统计功能的实现来说尤为重要。本文将介绍如何设计一个优化的...
      99+
      2023-10-31
      数据统计功能 MySQL表结构设计 优化MySQL表结构
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作