亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Commands Queries設(shè)計(jì)模式提高Angular應(yīng)用性能及可維護(hù)性

 更新時(shí)間:2023年10月30日 09:48:27   作者:JerryWang_汪子熙  
在Angular應(yīng)用開(kāi)發(fā)領(lǐng)域,Commands and Queries 設(shè)計(jì)模式是一個(gè)關(guān)鍵的概念,它有助于有效地管理應(yīng)用程序的狀態(tài)和與后端的交互,本文將深入探討這一設(shè)計(jì)模式的核心要點(diǎn),并通過(guò)實(shí)際示例來(lái)加以說(shuō)明

基本概念

命令 (Commands)

命令代表了一項(xiàng)能夠改變系統(tǒng)狀態(tài)的操作,通常通過(guò)向后端發(fā)起REST調(diào)用來(lái)實(shí)現(xiàn)。每個(gè)命令都可以返回一個(gè)結(jié)果,并在執(zhí)行時(shí)考慮執(zhí)行策略。每次命令執(zhí)行都會(huì)返回一個(gè)Observable,它會(huì)在命令執(zhí)行完成后發(fā)出(可選的成功結(jié)果),然后完成,或者在命令執(zhí)行導(dǎo)致錯(cuò)誤時(shí)拋出錯(cuò)誤。

重要的是要注意,訂閱結(jié)果Observable并不會(huì)觸發(fā)命令的執(zhí)行,這是可選的。

命令可以通過(guò)將CommandService.create工廠方法的調(diào)用結(jié)果存儲(chǔ)為類的屬性來(lái)定義。一個(gè)命令通常包括以下參數(shù):

  • 調(diào)度命令的函數(shù)(通常是調(diào)用連接器的函數(shù))。
  • 選項(xiàng)對(duì)象(通常用于指定執(zhí)行策略)。

以下是一個(gè)示例:

protected updateCommand: Command<{ details: User }> = this.command.create(
  (payload) =>
    this.userIdService.takeUserId(true).pipe(
      switchMap((uid) =>
        this.userProfileConnector.update(uid, payload.details)
      ),
  {
    strategy: CommandStrategy.Queue,
  }
);

查詢 (Queries)

與命令不同,查詢是一種不改變系統(tǒng)狀態(tài)的操作,它用于從系統(tǒng)中檢索數(shù)據(jù)而不會(huì)對(duì)其進(jìn)行修改。通常,查詢返回一個(gè)Observable,它發(fā)出數(shù)據(jù)并完成,供訂閱者使用。與命令一樣,查詢也可以定義執(zhí)行策略。

執(zhí)行策略

命令和查詢的執(zhí)行可以根據(jù)執(zhí)行策略進(jìn)行控制,以下是一些常見(jiàn)的執(zhí)行策略:

  • Parallel(并行):執(zhí)行所有命令或查詢并行進(jìn)行,不考慮它們的順序。
  • Queue(隊(duì)列):命令或查詢按照它們的調(diào)用順序排隊(duì)執(zhí)行,這是默認(rèn)的執(zhí)行策略。
  • CancelPrevious(取消上一個(gè)):如果一個(gè)命令或查詢尚未完成執(zhí)行,新的執(zhí)行將開(kāi)始,并且會(huì)取消上一個(gè)執(zhí)行。上一個(gè)執(zhí)行的結(jié)果流將完成而不發(fā)出值。
  • ErrorPrevious(上一個(gè)錯(cuò)誤):如果一個(gè)命令或查詢尚未完成執(zhí)行,新的執(zhí)行將開(kāi)始,并且會(huì)為上一個(gè)執(zhí)行引發(fā)錯(cuò)誤。上一個(gè)執(zhí)行的結(jié)果流將拋出錯(cuò)誤。

實(shí)際示例

為了更好地理解Commands and Queries設(shè)計(jì)模式,讓我們通過(guò)一個(gè)實(shí)際的示例來(lái)演示其應(yīng)用。假設(shè)我們正在開(kāi)發(fā)一個(gè)用戶管理系統(tǒng),我們需要?jiǎng)?chuàng)建一個(gè)命令來(lái)更新用戶的詳細(xì)信息。

首先,我們定義一個(gè)命令來(lái)執(zhí)行用戶詳細(xì)信息的更新:

protected updateCommand: Command<{ details: User }> = this.command.create(
  (payload) =>
    this.userIdService.takeUserId(true).pipe(
      switchMap((uid) =>
        this.userProfileConnector.update(uid, payload.details)
      ),
  {
    strategy: CommandStrategy.Queue,
  }
);

在這個(gè)示例中,updateCommand是一個(gè)命令,它會(huì)接收用戶的詳細(xì)信息并將其發(fā)送到后端。我們選擇了執(zhí)行策略為隊(duì)列,這意味著如果有多個(gè)更新請(qǐng)求,它們將按順序執(zhí)行,以確保數(shù)據(jù)的一致性。

現(xiàn)在,讓我們考慮一個(gè)查詢的示例。假設(shè)我們需要獲取用戶的個(gè)人資料:

protected getUserProfileQuery: Query<{ userId: string }, UserProfile> = this.query.create(
  (payload) => this.userProfileConnector.getProfile(payload.userId),
  {
    strategy: QueryStrategy.Parallel,
  }
);

這個(gè)查詢 getUserProfileQuery 接受用戶ID作為輸入,并從后端獲取用戶的個(gè)人資料。在這里,我們選擇了執(zhí)行策略為并行,這意味著我們可以同時(shí)獲取多個(gè)用戶的資料,以提高性能。

總結(jié)

Commands and Queries 設(shè)計(jì)模式是Angular應(yīng)用開(kāi)發(fā)中的重要概念,它有助于管理系統(tǒng)狀態(tài)和與后端的交互。命令用于執(zhí)行可能改變系統(tǒng)狀態(tài)的操作,而查詢用于檢索數(shù)據(jù)而不會(huì)改變狀態(tài)。執(zhí)行策略可用于控制命令和查詢的執(zhí)行方式,包括并行執(zhí)行、隊(duì)列執(zhí)行、取消上一個(gè)執(zhí)行和上一個(gè)錯(cuò)誤處理。

通過(guò)合理使用Commands and Queries設(shè)計(jì)模式,您可以提高Angular應(yīng)用程序的性能和可維護(hù)性,確保系統(tǒng)狀態(tài)的一致性,并有效地管理與后端的通信。這一設(shè)計(jì)模式為復(fù)雜的應(yīng)用程序提供了有力的工具,使開(kāi)發(fā)人員能夠更好地組織和管理代碼。

以上就是Commands Queries設(shè)計(jì)模式提高Angular應(yīng)用性能及可維護(hù)性的詳細(xì)內(nèi)容,更多關(guān)于Commands Queries設(shè)計(jì)模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • angularJs關(guān)于指令的一些冷門(mén)屬性詳解

    angularJs關(guān)于指令的一些冷門(mén)屬性詳解

    下面小編就為大家?guī)?lái)一篇angularJs關(guān)于指令的一些冷門(mén)屬性詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • AngularJS表單驗(yàn)證中級(jí)篇(3)

    AngularJS表單驗(yàn)證中級(jí)篇(3)

    這篇文章主要為大家詳細(xì)介紹了AngularJS表單驗(yàn)證,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • AngularJS下對(duì)數(shù)組的對(duì)比分析

    AngularJS下對(duì)數(shù)組的對(duì)比分析

    下面小編就為大家?guī)?lái)一篇AngularJS下對(duì)數(shù)組的對(duì)比分析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • Angular2 Service實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器服務(wù)

    Angular2 Service實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器服務(wù)

    本篇文章主要介紹了Angular2 Service實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器服務(wù) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Angular中使用MathJax遇到的一些問(wèn)題

    Angular中使用MathJax遇到的一些問(wèn)題

    這篇文章主要給大家介紹了關(guān)于Angular中使用MathJax遇到的一些問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • MODULE_INITIALIZER初始化Angular?懶加載模塊高級(jí)技巧

    MODULE_INITIALIZER初始化Angular?懶加載模塊高級(jí)技巧

    這篇文章主要為大家介紹了MODULE_INITIALIZER初始化Angular懶加載模塊高級(jí)技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • AngularJS  雙向數(shù)據(jù)綁定詳解簡(jiǎn)單實(shí)例

    AngularJS 雙向數(shù)據(jù)綁定詳解簡(jiǎn)單實(shí)例

    這篇文章主要介紹了AngularJS 雙向數(shù)據(jù)綁定詳解簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Angularjs實(shí)現(xiàn)mvvm式的選項(xiàng)卡示例代碼

    Angularjs實(shí)現(xiàn)mvvm式的選項(xiàng)卡示例代碼

    每位Web開(kāi)發(fā)者應(yīng)該都知道,選項(xiàng)卡是現(xiàn)代web網(wǎng)頁(yè)中最常用的效果之一,所以本文重點(diǎn)是用angularjs這個(gè)非常火mvvm框架,實(shí)現(xiàn)選項(xiàng)卡效果。有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-09-09
  • AngularJS基礎(chǔ) ng-if 指令用法

    AngularJS基礎(chǔ) ng-if 指令用法

    本文主要介紹了AngularJS ng-if 指令,在這里整理了一些ng-if 指令的基礎(chǔ)資料,并有實(shí)例代碼,有需要的同學(xué)可以參考下
    2016-08-08
  • 詳解AngularJs ui-router 路由的簡(jiǎn)單介紹

    詳解AngularJs ui-router 路由的簡(jiǎn)單介紹

    本篇文章主要介紹了AngularJs ui-router 路由的簡(jiǎn)單介紹。簡(jiǎn)單明了的說(shuō)明了ngRoute和ui-router的區(qū)別和用法,有興趣的可以了解一下
    2017-04-04

最新評(píng)論