如何使用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.pswp.cn/news/393599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393599.shtml
英文地址,請注明出處:http://en.pswp.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…