Apex 企業(yè)設(shè)計模式

FFLIB 是一個免費的框架页眯,對 Apex 進行了擴展梯捕。它的結(jié)構(gòu)實現(xiàn)了 Salesforce 推薦的Apex 企業(yè)設(shè)計模式

在學(xué)習(xí)如何使用 FFLIB 框架之前窝撵,我們先來了解一下 Apex 企業(yè)設(shè)計模式的結(jié)構(gòu)傀顾。

Apex 企業(yè)設(shè)計模式

Apex 企業(yè)設(shè)計模式的結(jié)構(gòu)遵循了“關(guān)注點分離”的概念。

維基百科上對于“關(guān)注點分離”的定義是:

關(guān)注點分離(Separation of concerns碌奉,SOC)是對只與“特定概念短曾、目標”(關(guān)注點)相關(guān)聯(lián)的軟件組成部分進行“標識、封裝和操縱”的能力赐劣,即標識嫉拐、封裝和操縱關(guān)注點的能力。是處理復(fù)雜性的一個原則魁兼。由于關(guān)注點混雜在一起會導(dǎo)致復(fù)雜性大大增加婉徘,所以能夠把不同的關(guān)注點分離開來,分別處理就是處理復(fù)雜性的一個原則,一種方法盖呼。

關(guān)注點分離是面向?qū)ο蟮某绦蛟O(shè)計的核心概念儒鹿。分離關(guān)注點使得解決特定領(lǐng)域問題的代碼從業(yè)務(wù)邏輯中獨立出來,業(yè)務(wù)邏輯的代碼中不再含有針對特定領(lǐng)域問題代碼的調(diào)用(將針對特定領(lǐng)域問題代碼抽象化成較少的程式碼几晤,例如將代碼封裝成function或是class)约炎,業(yè)務(wù)邏輯同特定領(lǐng)域問題的關(guān)系通過側(cè)面來封裝、維護蟹瘾,這樣原本分散在整個應(yīng)用程序中的變動就可以很好的管理起來圾浅。

企業(yè)設(shè)計模式的實現(xiàn)分為以下四個部分:

  • 服務(wù)層(Service Layer)
  • 模型層(Domain Layer)
  • 選擇邏輯層(Selector Layer)
  • 工作單元(Unit of Work)

以上四個部分的詳細定義可以參考 Martin Fowler 的網(wǎng)站

服務(wù)層

服務(wù)層的作用是提供一組函數(shù)热芹,將可重用的邏輯封裝起來贱傀,供外部調(diào)用。

這里的“外部”包括了外部的應(yīng)用程序和 Salesforce 本身的一些功能伊脓,比如 Visualforce 頁面的控制器府寒、Salesforce 的 API 服務(wù)等。

代碼示例

用 Apex 建立一個服務(wù)類:

public with sharing class AccountService {
    public static Account createAccount(String name) {
        // 建立 Account 對象的邏輯
        Account a = new Account(Name = name);
        
        SavePoint sp = Database.setSavePoint();
        try {
            insert a;
        } catch (Exception e) {
            Database.rollback(sp);

            throw e;
        }
    }
}

然后在其他代碼中(比如 Visualforce 頁面的控制器)就可以使用了:

Account a = AccountService.createAccount('HelloWorld Company');

模型層

每個模型層的類都是針對某個對象而創(chuàng)建报腔。模型層的類中封裝了針對相關(guān)對象的一系列邏輯株搔,比如對象被增刪修改之后需要自動執(zhí)行的操作等。

和服務(wù)層不同的是纯蛾,模型層中的邏輯是不會被外部調(diào)用的(但是可以被服務(wù)層調(diào)用)纤房。

在 Apex 中,觸發(fā)器類是典型的模型層的類翻诉。

選擇邏輯層

選擇邏輯層的作用是封裝了查詢相關(guān)對象的邏輯炮姨,從而將數(shù)據(jù)庫操作與其他的層分離。

代碼示例

用 Apex 建立一個選擇邏輯類:

public with sharing class AccountSelector {
    public static Account selectById(Id id) {
        // 通過 Id 查詢 Account 對象的邏輯
        // ...
    }
}

然后在其他代碼中(比如服務(wù)層或外部代碼)就可以使用了:

Account a = AccountSelector.selectById('XXXXXXXXXXXXXXXXXX');

工作單元

工作單元是一種設(shè)計模式碰煌,它負責(zé)保存在各個邏輯中被增刪修改的數(shù)據(jù)舒岸,并負責(zé)將這些數(shù)據(jù)的變化寫入數(shù)據(jù)庫。

對于 Apex 的開發(fā)芦圾,使用工作單元可以實現(xiàn)以下幾個方面:

  • 記錄一系列被增刪修改的數(shù)據(jù)
  • 記錄數(shù)據(jù)之間的關(guān)系
  • 在將數(shù)據(jù)的變化保存到數(shù)據(jù)庫時蛾派,一次性寫入,提高系統(tǒng)性能
  • 在將數(shù)據(jù)的變化保存到數(shù)據(jù)庫時个少,自動定義 SavePoint洪乍,在出現(xiàn)錯誤時自動回滾。這樣就減輕了開發(fā)者的工作

比如在 .NET 的 Entity Framework中夜焦,ObjectContext 和 DbContext 的設(shè)計就體現(xiàn)了工作單元的模式壳澳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市糊探,隨后出現(xiàn)的幾起案子钾埂,更是在濱河造成了極大的恐慌河闰,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褥紫,死亡現(xiàn)場離奇詭異姜性,居然都是意外死亡,警方通過查閱死者的電腦和手機髓考,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門部念,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氨菇,你說我怎么就攤上這事儡炼。” “怎么了查蓉?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵乌询,是天一觀的道長。 經(jīng)常有香客問我豌研,道長妹田,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任鹃共,我火速辦了婚禮鬼佣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘霜浴。我一直安慰自己晶衷,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布阴孟。 她就那樣靜靜地躺著晌纫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪永丝。 梳的紋絲不亂的頭發(fā)上缸匪,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音类溢,去河邊找鬼。 笑死露懒,一個胖子當著我的面吹牛闯冷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懈词,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蛇耀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坎弯?” 一聲冷哼從身側(cè)響起纺涤,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤译暂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后撩炊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體外永,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年拧咳,在試婚紗的時候發(fā)現(xiàn)自己被綠了伯顶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡骆膝,死狀恐怖祭衩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阅签,我是刑警寧澤掐暮,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站政钟,受9級特大地震影響路克,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锥涕,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一衷戈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧层坠,春花似錦殖妇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至座每,卻和暖如春前鹅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背峭梳。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工舰绘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人葱椭。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓捂寿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親孵运。 傳聞我的和親對象是個殘疾皇子秦陋,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,111評論 1 32
  • 上午讀完了這本書驳概,對我而言最大的收貨是赤嚼,讀書,需要主題閱讀(在一個領(lǐng)域深耕)顺又,并且記錄更卒、持續(xù)輸出。單純的興趣閱讀待榔,...
    青溪長閱讀 135評論 0 1
  • 朝代:唐代作者:孟浩然原文:昨夜斗回北逞壁,今朝歲起東。我年已強仕锐锣,無祿尚憂農(nóng)腌闯。桑野就耕父,荷鋤隨牧童雕憔。田家占氣候姿骏,共...
    Othell0閱讀 354評論 0 0
  • 今天偶然在臉書上看到了一篇講金庸的文章。 看到標題里Jin Yong的時候還愣了一下斤彼,讀了幾行之后才反應(yīng)過來分瘦,那是...
    mochitta閱讀 162評論 0 0
  • 轉(zhuǎn)載聲明:本文作者:焦小橋文章來源:簡書二人戲著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者琉苇。 【一飛沖天】專題主編...
    一家獨行走天下閱讀 5,319評論 52 249