国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) web前端 js教程 用Peasy-JS編寫可重複使用的JavaScript業(yè)務(wù)邏輯

用Peasy-JS編寫可重複使用的JavaScript業(yè)務(wù)邏輯

Feb 17, 2025 am 11:40 AM

Write Reusable JavaScript Business Logic with peasy-js

Peasy-js: 構(gòu)建可複用、可擴(kuò)展、易於測(cè)試的業(yè)務(wù)邏輯

Peasy-js是一個(gè)中間層框架,它以可組合、可複用、可擴(kuò)展和易於測(cè)試的方式構(gòu)建業(yè)務(wù)邏輯,從而輕鬆地在應(yīng)用程序中替換UI、後端和數(shù)據(jù)訪問(wèn)框架。 它促進(jìn)業(yè)務(wù)邏輯的分離,使其易於測(cè)試、替換、重排、復(fù)用,並可在任何應(yīng)用程序架構(gòu)中使用,兼容各種JavaScript客戶端、服務(wù)器、數(shù)據(jù)訪問(wèn)技術(shù)和框架。

Peasy-js的核心概念包括:BusinessService、Command、Rule和DataProxy。這些概念在業(yè)務(wù)邏輯編排、數(shù)據(jù)驗(yàn)證以及數(shù)據(jù)存儲(chǔ)和檢索中發(fā)揮著關(guān)鍵作用。 通過(guò)Peasy-js,開(kāi)發(fā)者可以編寫一次代碼並在多個(gè)項(xiàng)目中重複使用,從而節(jié)省時(shí)間和精力。 它支持多種客戶端框架,並內(nèi)置數(shù)據(jù)驗(yàn)證和測(cè)試功能,確保數(shù)據(jù)完整性和代碼可靠性。

本文由Stephan Max同行評(píng)審。感謝所有SitePoint的同行評(píng)審員,使SitePoint的內(nèi)容達(dá)到最佳狀態(tài)!

Write Reusable JavaScript Business Logic with peasy-js

擺脫框架依賴,而非摒棄框架

我們不應(yīng)摒棄框架,因?yàn)樗鼈冊(cè)诳蛻舳撕头?wù)器端都提供了巨大的優(yōu)勢(shì)。 Peasy-js 的目標(biāo)是將業(yè)務(wù)邏輯抽象成可組合的單元,創(chuàng)建完全獨(dú)立於其使用者的代碼。 通過(guò)組件化業(yè)務(wù)邏輯,我們可以輕鬆地測(cè)試、替換、重排、復(fù)用這些組件,並在任何應(yīng)用程序架構(gòu)中使用,兼容任何可以想像的JavaScript客戶端、服務(wù)器、數(shù)據(jù)訪問(wèn)技術(shù)和框架。

業(yè)務(wù)邏輯分離

Peasy-js是一個(gè)中間層框架,通過(guò)創(chuàng)建可組合、可複用、可擴(kuò)展和易於測(cè)試的業(yè)務(wù)邏輯,可以輕鬆地替換應(yīng)用程序中的UI、後端和數(shù)據(jù)訪問(wèn)框架。 換句話說(shuō),Peasy-js指導(dǎo)我們通過(guò)編寫符合關(guān)注點(diǎn)分離 (SoC) 原則的代碼,將業(yè)務(wù)邏輯抽象成可組合的單元。

框架疲勞?

我知道你在想什麼:“又一個(gè)框架?”。是的,Peasy-js確實(shí)是一個(gè)微型框架。但是,如果我們著手組件化業(yè)務(wù)邏輯,最終很可能會(huì)自己編寫一個(gè)微型框架。 Peasy-js 投入了大量時(shí)間進(jìn)行設(shè)計(jì)、開(kāi)發(fā)和測(cè)試,支持幾乎所有可以想像的工作流程。 學(xué)習(xí)成本低,我相信您會(huì)發(fā)現(xiàn)學(xué)習(xí)它非常值得。

如果您發(fā)現(xiàn)Peasy-js不適合您,希望您能從框架中的一些模式中獲得一些關(guān)於如何實(shí)現(xiàn)自己的業(yè)務(wù)層的見(jiàn)解。

核心概念

Peasy-js包含四個(gè)主要概念:

  • 易於使用且靈活的業(yè)務(wù)和驗(yàn)證規(guī)則引擎
  • 可擴(kuò)展性和可複用性(將業(yè)務(wù)和驗(yàn)證邏輯與使用代碼和框架解耦)
  • 易於測(cè)試性

以下是這四個(gè)核心概念的詳細(xì)說(shuō)明:

  • BusinessService: 表示一個(gè)實(shí)體(例如用戶或項(xiàng)目),並負(fù)責(zé)通過(guò)命令公開(kāi)業(yè)務(wù)功能。這些命令封裝了CRUD和其他業(yè)務(wù)相關(guān)功能。
  • Command: 負(fù)責(zé)協(xié)調(diào)初始化邏輯、驗(yàn)證和業(yè)務(wù)規(guī)則執(zhí)行以及其他邏輯(數(shù)據(jù)代理調(diào)用、工作流邏輯等)的執(zhí)行,分別通過(guò)命令執(zhí)行管道進(jìn)行。
  • Rule: 可以創(chuàng)建規(guī)則來(lái)表示驗(yàn)證規(guī)則(字段長(zhǎng)度或必填)或業(yè)務(wù)規(guī)則(授權(quán)、價(jià)格有效性等)。規(guī)則由命令使用,可以進(jìn)行鍊式調(diào)用,根據(jù)先前規(guī)則的執(zhí)行結(jié)果進(jìn)行配置等。規(guī)則還可以配置為根據(jù)其執(zhí)行結(jié)果運(yùn)行代碼。
  • DataProxy: 負(fù)責(zé)數(shù)據(jù)存儲(chǔ)和檢索,並作為數(shù)據(jù)存儲(chǔ)的抽象層,涵蓋(但不限於)以下內(nèi)容:關(guān)係數(shù)據(jù)庫(kù)、文檔(NoSQL)數(shù)據(jù)庫(kù)、服務(wù)、緩存存儲(chǔ)、隊(duì)列、文件系統(tǒng)以及用於測(cè)試的內(nèi)存數(shù)據(jù)存儲(chǔ)。

Peasy-js示例

(注意:可以在plnkr上查看一個(gè)簡(jiǎn)單的瀏覽器示例,其中涵蓋了本節(jié)中討論的所有內(nèi)容。)

以下是如何在客戶端的Angular服務(wù)中使用Peasy-js編寫的業(yè)務(wù)邏輯的示例:

(圖A)

var dataProxy = new CustomerHttpDataProxy();
var service = new CustomerService(dataProxy);
var customer = { name:  "Frank Zappa", birthDate: new Date('12/21/1940') };
var command = service.insertCommand(customer);

command.execute(function(err, result) {
  if (result.success) {
    customer = result.value;
  } else {
    console.log(result.errors);
  }
});

以下是如何在服務(wù)器端的Express.js控制器中使用相同業(yè)務(wù)邏輯的示例:

(圖B)

var dataProxy = new CustomerMongoDataProxy();
var service = new CustomerService(dataProxy);
var customer = { name:  "Frank Zappa", birthDate: new Date('12/21/1940') };
var command = service.insertCommand(customer);

command.execute(function(err, result) {
  if (result.success) {
    customer = result.value;
  } else {
    console.log(result.errors);
  }
});

注意,除了在每個(gè)示例中註入到業(yè)務(wù)服務(wù)的不同的數(shù)據(jù)代理外,沒(méi)有區(qū)別。

請(qǐng)記住,數(shù)據(jù)代理是我們的數(shù)據(jù)訪問(wèn)抽象,可以表示文件系統(tǒng)訪問(wèn)、數(shù)據(jù)庫(kù)、隊(duì)列、緩存、內(nèi)存和HTTP通信的具體實(shí)現(xiàn)。 此抽象允許我們根據(jù)所需的系統(tǒng)架構(gòu)和配置交換數(shù)據(jù)代理,同時(shí)強(qiáng)制執(zhí)行SoC,並使其能夠跨代碼庫(kù)重用,並促進(jìn)更輕鬆的測(cè)試。 可能並不立即顯而易見(jiàn)的是,這種方法始終使我們的有效負(fù)載服從相同的業(yè)務(wù)邏輯,而不管我們數(shù)據(jù)的來(lái)源或目的地如何。 這很快就會(huì)顯現(xiàn)出來(lái)。

從消費(fèi)的角度來(lái)看,這就是全部?jī)?nèi)容。 使用Peasy-js開(kāi)發(fā)的業(yè)務(wù)邏輯的消費(fèi)將引入一個(gè)可識(shí)別的主題,而不管我們的架構(gòu)和使用它的技術(shù)如何。

說(shuō)到架構(gòu),讓我們將注意力轉(zhuǎn)向以這種方式開(kāi)發(fā)業(yè)務(wù)邏輯時(shí)很容易實(shí)現(xiàn)的潛在架構(gòu),同時(shí)更深入地探討Peasy-js參與者:

Write Reusable JavaScript Business Logic with peasy-js

(CustomerHttpDataProxy, CustomerMongoDataProxy, CustomerService 等代碼示例及測(cè)試示例,因篇幅限制,此處省略。原文中已提供完整代碼。)

總結(jié)

Peasy-js鼓勵(lì)我們編寫與使用的框架清晰分離的業(yè)務(wù)邏輯。 這帶來(lái)的一個(gè)好處是,它可以輕鬆地以多種方式部署我們的代碼。 最後,它使遷移到或採(cǎi)用新的框架變得非常容易,因?yàn)槲覀儺?dāng)前的框架會(huì)隨著時(shí)間的推移而老化。

(Frequently Asked Questions 部分,因篇幅限制,此處省略。原文中已提供完整FAQ。)

以上是用Peasy-JS編寫可重複使用的JavaScript業(yè)務(wù)邏輯的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語(yǔ)言,各自適用於不同的應(yīng)用場(chǎng)景。 Java用於大型企業(yè)和移動(dòng)應(yīng)用開(kāi)發(fā),而JavaScript主要用於網(wǎng)頁(yè)開(kāi)發(fā)。

JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開(kāi)始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫(kù);4.處理時(shí)區(qū)問(wèn)題建議使用支持時(shí)區(qū)的庫(kù),如Luxon。掌握這些要點(diǎn)能有效避免常見(jiàn)錯(cuò)誤。

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開(kāi)發(fā)人員的全面比較 JavaScript與Java:開(kāi)發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。 1.事件捕獲通過(guò)addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助於精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

JavaScript:探索用於高效編碼的數(shù)據(jù)類型 JavaScript:探索用於高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

如何減少JavaScript應(yīng)用程序的有效載荷大??? 如何減少JavaScript應(yīng)用程序的有效載荷大??? Jun 26, 2025 am 12:54 AM

如果JavaScript應(yīng)用加載慢、性能差,問(wèn)題往往出在payload太大,解決方法包括:1.使用代碼拆分(CodeSplitting),通過(guò)React.lazy()或構(gòu)建工具將大bundle拆分為多個(gè)小文件,按需加載以減少首次下載量;2.移除未使用的代碼(TreeShaking),利用ES6模塊機(jī)制清除“死代碼”,確保引入的庫(kù)支持該特性;3.壓縮和合併資源文件,啟用Gzip/Brotli和Terser壓縮JS,合理合併文件並優(yōu)化靜態(tài)資源;4.替換重型依賴,選用輕量級(jí)庫(kù)如day.js、fetch

See all articles