在日常发展中,作者每天都会遇到一个有条件的分支机构判断的场景,几年来我已经在业务中写了很多判断,有时我看到它时感到不舒服。优化分支代码的条件。最近,我还阅读了一些文章。他们一致提到的文章。我对这件事很好奇,所以我花了很多时间来学习它的想法。想与您分享更好的地方,而不是一开始就讲这个概念。
目前,您皱着眉头修复了错误。目前,产品经理过来对您说:小家伙,有一个简单的注册功能来实施它。此表格需要包括以下用户信息:
提交表格时,您需要检查格式:
您可能分析了它,感觉很好。您的想法如下:
问题是如何编写此验证,因此您开始实现代码。
首先,让我们首先设置DOM结构。考虑样式仍然非常简单:
然后,我们需要实现JS逻辑,首先获得表单实例,然后检查每个字段:
实施效应如下:
您快乐地提交代码,然后开始“触摸鱼”?
目前,您的同事的另一位同事收到了需求:
它找到了这种方法,看着您,然后添加了规则。目前,此验证功能变得越来越大...
发现此规则不仅在注册模块中使用后。当您要重复使用此代码时,您会发现您必须在开始时编写如此多的判断,但是过去您有相同的代码。最后,此代码在他人的眼中。
在下个月,您开始培养设计模式的“内部力量”。发现战略模型可以很好地优化逻辑的这一部分。尽管以前的代码确实不正确,但幸运的是,您可以追求代码。因此,您花了很长时间来优化此代码,但您提出了两个要求:
首先,需要一个规则对象。所有规则和方法都封装在此对象中,这些方法需要遵守某些参数规则:
现在,我们将此文件单独放在一个地方进行维护:
规则
有了这个对象,我们可以统一添加各种规则,如果规则更改,则可以易于更改,而无需考虑特定的业务逻辑。
然后,我们需要抽象一个实验室。您可以理解,它是一个可以使用它来添加和触发规则的控制器。它具有以下属性:
让我们实现此类:
验证器
接下来,我们需要编写业务逻辑:
目前,代码维护更好。即使添加了表单项目,也没关系。我们只需要将其添加到最后。如果仍然是先前的练习,它可能需要写很多。这样,这种方法不需要关心业务逻辑中的特定验证方法,并以配置形式添加规则是反映策略模式。这似乎很模糊。
那么,策略模式是什么?
我个人理解的句子的摘要是:为了实现目标,无论是什么方式!
让我们首先看一下“策略”的第一个单词。该策略实际上是所有可以实现目标的解决方案的观点。上面示例中的所有规则都是策略。考虑一下我们必须采用这些策略的内容。然后回顾上面的类。验证功能后,用户使用它来管理验证规则,为了实现验证的目的,有各种策略。
策略模式是指一系列算法,将它们一个一个接一个地封装。恒定部分和变化部分的分离是每个设计模式的主题。策略模式也不例外。策略模式的目的是将算法的使用与算法的实现分开。
战略模式有两个部分:
现在,您至少应该理解它的谜团,它的使用情况如何?
策略模式实际上是更常用的。通常,您可以考虑何时发现业务逻辑是为了实现一定目标做出许多判断。除上述形式验证案例外,实际上还有许多应用程序方案。
移动付款。目前,所有消费均通过扫描代码支付,但是有很多付款方式。有些人喜欢Apley,有些人使用微信以及Unionpay ...
当您想到一件事时,您自然可以考虑策略模式。“代码付款”是一个目标,“付款方式”是一组策略。
我们的日常旅行可能有很多旅行的方法。为了实现这一目标,我们将选择以下内容:
这些不同的旅行方式是在战略模型中使用武术。
上述情况可能在实际战斗中使用较少。每个人都必须使用一个框架开发。例如,我将讨论源代码中的策略模式,以加深每个人的理解。
每个人都必须清楚地表明,它将被引入对象中,或者将其混合到某个组件中:
每个属性合并的规则实际上是不同的。这些不同的规则实际上是策略模式下的策略,也称为“算法”。用户不必担心内部实施。我们只需要安装行业来编写它。LET来看一下特定的实现。
首先,内部呼叫方法将被称为一些初始化:
src/core/instance/index.js
此方法具有处理入口配置的逻辑:
src/core/instance/init.js
请注意,这是一种关键方法。它将合并内部配置和现有配置以使用自己的“算法”。此方法是,以下是其核心逻辑:
首先,将执行标准化配置,主要是均匀操作这三个属性,并均匀地转换为内部格式:
接下来将在配置中合并递归和递归:
然后输入最关键的链接,并使用策略模式进行配置和配置合并:
让我们回顾一下策略模式通常有两个主要类别:
定义了每种配置的合并,即特定算法,这些算法是在当前文件(src/core/core/util/options.js)中定义的,并且由于长度,我不会列出所有合并的策略。策略。在这里选择一些规则进行介绍。
生命周期功能的合并策略。
定义,它列出了Vue中的所有生命周期:
接下来,让我们看一下其核心逻辑。它的核心逻辑是一个非常复杂的三元计算符号,但是我们可以将其转换为以下方式:
通常,生命周期的钩子合并为阵列(队列)。这可以解释说,当我们使用Mixin的生命周期触发时,将执行钩函数。
当然,不要在实际发展中四处乱逛...
当您使用或使用时,通常会合并数据/提供的合并策略。最常见的是。它的合并策略是什么?让我们来看看。
您可以在合并之前看到一些处理。除了Cobies,我们通常是一个功能,因此我们需要先称其为首先,获取返回对象,然后调用合并:
从以上,我们可以看到合并规则如下:
可以看出,该代码非常严格且值得我们学习。
除了上述两种策略外,其他属性的合并策略也值得学习。如果您有兴趣,可以继续深入研究。我相信您在这里对策略模型有更好的了解。
在本文的开头,引入了形式验证的情况。使用两种不同的方法来解决此场景问题。一个更普遍,另一种是一种战略模式。它通过比较突出了策略模式的优势。概念及其应用程序方案。从本文中,您可以通过了解VUE的源代码来理解策略模式的应用。不能解决基本问题,并且在涉及大量分支机构时,维护性仍然很差。
当然,战略模型也有缺点。例如,如果有很多策略,则此策略类是巨大的(JS更好,用普通对象描述此类),因此您需要根据实际情况使用它。希望这篇文章能帮助您。
[1] Zeng Tan .Javascript设计模型和实践:人们的帖子和电信出版社,2015年
每个人的支持是我们继续前进的动力。快来注意我们对前端服务团队的信心?
同时,如果您对我们感兴趣,欢迎加入我们。目前,有很多工作需求,欢迎您提交简历。
原始:https://juejin.cn/post/7096282005297430558