国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在事務(wù)中使用閉包優(yōu)化代碼結(jié)構(gòu)

zhiwei / 3198人閱讀

摘要:以下是事務(wù)代碼業(yè)務(wù)代碼實(shí)現(xiàn)幾乎所有事務(wù)都需要如此處理,但是這樣重復(fù)代碼太多,實(shí)際上只需要關(guān)心的部分是業(yè)務(wù)代碼部分,使用閉包函數(shù)可以很好的解決這個(gè)問題。

閉包函數(shù)

PHP官方文檔對(duì)于閉包函數(shù)的定義:

匿名函數(shù)(Anonymous functions),也叫閉包函數(shù)(closures),允許 臨時(shí)創(chuàng)建一個(gè)沒有指定名稱的函數(shù)。最經(jīng)常用作回調(diào)函數(shù)(callback)參數(shù)的值。當(dāng)然,也有其它應(yīng)用的情況。

簡(jiǎn)單來說,閉包函數(shù)也是一種數(shù)據(jù)類型,可以直接使用變量來存儲(chǔ)、傳參、調(diào)用等等。

事務(wù)

事務(wù)簡(jiǎn)單來說就是一個(gè)核心:

事務(wù)處理可以用來維護(hù)數(shù)據(jù)庫的完整性,保證成批的 SQL 語句要么全部執(zhí)行,要么全部不執(zhí)行。

一般情況下,每一條SQL的執(zhí)行情況都需要進(jìn)行判斷,如果執(zhí)行成功則繼續(xù),否則回滾事務(wù)。以下是PDO事務(wù)代碼:

$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "root");
try {
    $pdo->beginTransaction();
    //todo 業(yè)務(wù)代碼
    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollBack();
    throw $e;
}
PHP實(shí)現(xiàn)

幾乎所有事務(wù)都需要如此處理,但是這樣重復(fù)代碼太多,實(shí)際上只需要關(guān)心的部分是 業(yè)務(wù)代碼 部分,使用閉包函數(shù)可以很好的解決這個(gè)問題。

閉包函數(shù)可以理解為具體的業(yè)務(wù)邏輯,不帶任何事務(wù)相關(guān)操作,如果出現(xiàn)異常,會(huì)自動(dòng)回滾事務(wù)。

PHP的簡(jiǎn)單實(shí)現(xiàn)代碼如下:

function transaction(PDO $pdo, callable $callable)
{
    try {
        $pdo->beginTransaction();
        $result = call_user_func($callable, $pdo);
        $pdo->commit();
        return $result;
    } catch (Exception $e) {
        $pdo->rollBack();
        throw $e;
    }
}

PHP調(diào)用方法代碼如下:

transaction($pdo, function (PDO $pdo) {
    return $pdo->query("INSERT INTO `test` VALUES (1)");
});
結(jié)語

使用閉包函數(shù)去簡(jiǎn)化樣板代碼在生產(chǎn)中是很常見的,具體的設(shè)計(jì)模式應(yīng)該是類似“模板方法模式”。

來自我的博客:https://www.ddhigh.com/2019/0...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/31473.html

相關(guān)文章

  • Yii2開發(fā)技巧 使用類似閉包的方式封裝事務(wù)

    摘要:第二沒有記錄日志的行為,即使出了問題也不容易排除。異常錯(cuò)誤然后回到如何傳參的問題,我們可以使用閉包,貼一段偽代碼,如下執(zhí)行事務(wù)業(yè)務(wù)代碼大功告成,代碼看起來有沒有更好看呢如有問題,歡迎指教。 在控制器中執(zhí)行事務(wù)的時(shí)候,一般的代碼如下: $transaction = Yii::$app->db->beginTransaction(); try { //一些業(yè)務(wù)代碼 $tra...

    shevy 評(píng)論0 收藏0
  • Laravel使用數(shù)據(jù)庫事務(wù)以及捕獲事務(wù)失敗后的異常

    摘要:在中要想在數(shù)據(jù)庫事務(wù)中運(yùn)行一組操作,則可以在中使用方法。如果在事務(wù)的閉包內(nèi)拋出異常,事務(wù)將會(huì)被自動(dòng)還原。 Description 在Laravel中要想在數(shù)據(jù)庫事務(wù)中運(yùn)行一組操作,則可以在 DB facade 中使用 transaction 方法。如果在事務(wù)的閉包內(nèi)拋出異常,事務(wù)將會(huì)被自動(dòng)還原。如果閉包運(yùn)行成功,事務(wù)將被自動(dòng)提交。你不需要擔(dān)心在使用 transaction 方法時(shí)還需要...

    newtrek 評(píng)論0 收藏0
  • 學(xué)Java編程需要注意的地方

    摘要:學(xué)編程真的不是一件容易的事不管你多喜歡或是多會(huì)編程,在學(xué)習(xí)和解決問題上總會(huì)碰到障礙。熟練掌握核心內(nèi)容,特別是和多線程初步具備面向?qū)ο笤O(shè)計(jì)和編程的能力掌握基本的優(yōu)化策略。   學(xué)Java編程真的不是一件容易的事,不管你多喜歡或是多會(huì)Java編程,在學(xué)習(xí)和解決問題上總會(huì)碰到障礙。工作的時(shí)間越久就越能明白這個(gè)道理。不過這倒是一個(gè)讓人進(jìn)步的機(jī)會(huì),因?yàn)槟阋恢辈粩嗟膶W(xué)習(xí)才能很好的解決你面前的難題...

    leanxi 評(píng)論0 收藏0
  • 【前端性能優(yōu)化】高性能JavaScript整理總結(jié)

    摘要:然后執(zhí)行環(huán)境會(huì)創(chuàng)建一個(gè)活動(dòng)對(duì)象,活動(dòng)對(duì)象作為函數(shù)運(yùn)行的變量對(duì)象,包含所有局部變量命名參數(shù)參數(shù)集合和,當(dāng)執(zhí)行環(huán)境銷毀,活動(dòng)對(duì)象也被銷毀。 高性能JavaScript整理總結(jié) 關(guān)于前端性能優(yōu)化:首先想到的是雅虎軍規(guī)34條然后最近看了《高性能JavaScript》大概的把書中提到大部分知識(shí)梳理了下并加上部分個(gè)人理解這本書有參考雅虎特別性能小組的研究成果,所以跟34 軍規(guī)有很多相似之處有不當(dāng)之...

    zzbo 評(píng)論0 收藏0
  • 【前端性能優(yōu)化】高性能JavaScript整理總結(jié)

    摘要:然后執(zhí)行環(huán)境會(huì)創(chuàng)建一個(gè)活動(dòng)對(duì)象,活動(dòng)對(duì)象作為函數(shù)運(yùn)行的變量對(duì)象,包含所有局部變量命名參數(shù)參數(shù)集合和,當(dāng)執(zhí)行環(huán)境銷毀,活動(dòng)對(duì)象也被銷毀。 高性能JavaScript整理總結(jié) 關(guān)于前端性能優(yōu)化:首先想到的是雅虎軍規(guī)34條然后最近看了《高性能JavaScript》大概的把書中提到大部分知識(shí)梳理了下并加上部分個(gè)人理解這本書有參考雅虎特別性能小組的研究成果,所以跟34 軍規(guī)有很多相似之處有不當(dāng)之...

    bovenson 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

zhiwei

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<