如何使用JavaScript中的工厂函数构建可靠的对象

Discover Functional JavaScript was named one of the best new Functional Programming books by BookAuthority!

“发现功能JavaScript”BookAuthority评为最佳新功能编程书籍之一

I suggest to take into consideration these ideas for building reliable objects in JavaScript:

我建议考虑以下想法以在JavaScript中构建可靠的对象:

  • Split objects in two: data objects and behavior objects

    将对象一分为二:数据对象和行为对象
  • Make the data objects immutable

    使数据对象不可变
  • Expose behavior and hide data in behavior objects

    公开行为并隐藏行为对象中的数据
  • Build testable behavior objects

    建立可测试的行为对象

数据与行为对象 (Data vs Behavior Objects)

Essentially there are two kinds of objects in an application:

本质上,应用程序中有两种对象:

  • Data Objects — expose data

    数据对象-公开数据

  • Behavior Objects — expose behavior and hide data

    行为对象-公开行为并隐藏数据

数据对象 (Data Objects)

Data objects expose data. They are used to structure and transfer data inside the application.

数据对象公开数据。 它们用于在应用程序内部构造和传输数据。

Let’s take the case of a to-do list application.

让我们以待办事项清单应用程序为例。

This is how the to-do data object, gotten from the server, may look:

这是从服务器获得的待办事项数据对象的外观:

{ id: 1, title: "This is a title", userId: 10, completed: false }

And this is how a data object used to display information in the view may look:

这是用来在视图中显示信息的数据对象的外观:

{ id: 1, title: "This is a title", userName: "Cristi", completed: false };

As you can see, both objects contain only data. There is a small difference between them: the data object for the view has userName instead of the userId.

如您所见,两个对象仅包含数据。 它们之间的差别很小:视图的数据对象具有userName而不是userId

Data objects are plain objects, usually built with object literals.

数据对象是普通对象,通常使用对象文字构建。

行为对象 (Behavior Objects)

Behavior objects expose methods and hide data.

行为对象公开方法并隐藏数据。

Behavior objects act on data objects. They may take data objects as inputs or return data objects.

行为对象作用于数据对象。 它们可以将数据对象作为输入或返回数据对象。

I’ll take the case of the TodoStore object. The responsibility of the object is to store and manage the list of to-dos. It makes the synchronization with the server using the dataService object.

我将以TodoStore对象TodoStore 。 对象的职责是存储和管理待办事项清单。 它使用dataService对象与服务器进行同步。

Read Functional Architecture with React and Redux and learn how to build apps in function style.

阅读具有React和Redux的功能架构,并学习如何以函数样式构建应用程序。

Discover Functional JavaScript was named one of the best new Functional Programming books by BookAuthority!

发现功能JavaScript被称为 BookAuthority最好的新功能编程书籍

For more on applying functional programming techniques in React take a look at Functional React.

有关在React中应用函数式编程技术的更多信息,请查看 Functional React

You can find me on Medium and Twitter.

您可以在Medium和Twitter上找到我。

翻译自: https://www.freecodecamp.org/news/how-to-build-reliable-objects-with-factory-functions-in-javascript-9ec1c089ea6f/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode99. 恢复二叉搜索树(优先队列)

二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例 1:输入: [1,3,null,null,2]1/3\2输出: [3,1,null,null,2]3/1\2代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* …

Android零基础入门第83节:Activity间数据传递方法汇总

2019独角兽企业重金招聘Python工程师标准>>> 在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递。 一、常用数据类型 在前面几节我们只学习了一些常用类型的数据传递…

mysql gz 安装_Linux下安装mysql 5.7.17.tar.gz的教程详解

1.创建MySQL组和mysql用户groupadd mysqluseradd -r -g mysql mysql2.拷贝:cp -R mysql-5.7.16-linux-glibc2.5-i686 /usr/local/mysql3.创建data目录mkdir /usr/local/mysql/data3.安装数据库切换到/usr/loca/mysql目录下cd /usr/local/mysql修改当前目录的所有者为…

02-c#基础之01-基础语法(一)

1.注释符 1)注销 2) 解释 2.C#中的3种注释符 1)单行注释// 2)多行注释/*要注释的内容*/ 3)文档注释///多用来解释类或者方法 2.VS中的快捷键 转载于:https://www.cnblogs.com/yoyo-524/p/6502827.html

day01_初识python

编译型:一次性将所有的代码编译呈二进制文件。C/C 优点:执行效率高 缺点:开发速度慢,不能跨平台 解释型:当程序运行时,从上到下一行一行的解释为二进制文件 优点:开发效率快,可以跨平…

leetcode1414. 和为 K 的最少斐波那契数字数目(贪心算法)

给你数字 k ,请你返回和为 k 的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。 斐波那契数字定义为: F1 1 F2 1 Fn Fn-1 Fn-2 , 其中 n > 2 。 数据保证对于给定的 k ,一定能找…

四五六年级计算机教学计划,五六年级信息技术教学计划

五六年级信息技术教学计划一、大纲对本册教材的要求作为小学阶段的信息技术课程,应以学生对计算机的学习心理、学习行为和学习方法为背景,把计算机基础知识和计算机最新应用融于一体,使之既体现信息技术学科的教学理论,又吸收现代…

ios 跨域_如何在iOS和Android中建立跨域通信桥

ios 跨域I was working on a certain project at work, in which I needed to connect several varying components via messages. Each had its own logic and code language. This made me want to understand all the ways different platforms enable communication.我正在…

阿里巴巴旗下平台口碑推出无人收银技术,改造便利店市场;重庆法院运用 AI 探索“智能判案”...

阿里巴巴旗下平台口碑推出无人收银技术,改造便利店市场 雷锋网消息 阿里巴巴旗下本地生活服务平台口碑今日宣布在上海新兴便利店品牌24鲜上线无人收银技术。消费者只要打开支付宝,扫一扫想要购买的商品的条形码,就可以自助提交订单完成支付。…

如何使用射手影音寻找字幕

我们以"理智与情感"Sense and Sensibility为例,在迅雷搜索了下载,结果到了99%就不动了,由于是字幕文件,不能直接把TD的后缀去掉看影片,但是影片已经下载完成,所以我们使用射手影音播放该电影。&a…

mysql 表分区优缺点_Mysql分区表局限性总结

本文测试的版本XML/HTML代码mysql>select version();------------| version() |------------| 5.1.33-log |------------1 row in set (0.00 sec)一、关于Partitioning Keys, Primary Keys, and UniqueKeys的限制在5.1中分区表对唯一约束有明确的规定,每一个唯一…

C# PagedList 真分页

一&#xff1a;nuget 下载 PagedList 二&#xff1a;前端页面 1.需要的数据 model PagedList.IPagedList<DeviceModel>  using PagedList.Mvc 2.使用数据 foreach (var item in Model)   {    <tr> <td>item.Name</td>       <td>…

leetcode1497. 检查数组对是否可以被 k 整除

给你一个整数数组 arr 和一个整数 k &#xff0c;其中数组长度是偶数&#xff0c;值为 n 。 现在需要把数组恰好分成 n / 2 对&#xff0c;以使每对数字的和都能够被 k 整除。 如果存在这样的分法&#xff0c;请返回 True &#xff1b;否则&#xff0c;返回 False 。 示例 1…

计算机页面设置代码,计算机二级考试Access辅导:页面设置模块代码分享

Dim up, dn, le, ri, si, liAs Single , co As string’定义边距及页面函数Sub ymszmk(strName As String) ’页面设置模块On Error GoTo Err_ymszmkIf Nz(DCount("*", "REPORTLIP", "REPORT’" & strName & "’")) 0 ThenMs…

让我们了解Set及其在JavaScript中的独特功能

by Asif Norzai通过Asif Norzai 让我们了解Set及其在JavaScript中的独特功能&#x1f3b2; (Lets learn about Set and its unique functionality in JavaScript &#x1f3b2;) 设置&#x1f3b2; (SET &#x1f3b2;) ES2015/ES6 gave us a lot of useful tools and feature…

C语言第二次博客作业---分支结构

一、PTA实验作业 题目1&#xff1a;计算分段函数[2] 本题目要求计算下列分段函数f(x)的值&#xff1a; 1.实验代码 double x,result;scanf("%lf",&x);if(x>0){resultsqrt(x);}else{resultpow(x1,2)2*x1/x;}printf("f(%.2f) %.2f",x,result); 2 设计…

oracle+数据到+mysql数据库乱码_oracle数据mysql数据库乱码

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

ajax 不执行

1、get形式访问&#xff1a; 一个相同的URL 只有一个结果&#xff0c;所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果&#xff0c;post则不会 解决办法: 1、urlnew Date(); &#xff08;每次访问时url不同&#xff09; 2、 type : get,   …

leetcode870. 优势洗牌(贪心算法)

给定两个大小相等的数组 A 和 B&#xff0c;A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。 返回 A 的任意排列&#xff0c;使其相对于 B 的优势最大化。 示例 1&#xff1a; 输入&#xff1a;A [2,7,11,15], B [1,10,4,11] 输出&#xff1a;[2,11,…

Mysql中行转列和列转行

一、行转列即将原本同一列下多行的不同内容作为多个字段&#xff0c;输出对应内容。建表语句DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score( id INT(11) NOT NULL auto_increment, userid VARCHAR(20) NOT NULL COMMENT 用户id, subject VARCHAR(20) COMMENT…