Resource-Method-Representation(譯)

原文:https://herbertograca.com/2018/08/31/resource-method-representation/

這篇文章是軟件架構(gòu)編年史()的一部分,這部編年史由一系列關(guān)于軟件架構(gòu)的文章組成惠啄。在這一系列文章中慎恒,我將寫(xiě)下我對(duì)軟件架構(gòu)的學(xué)習(xí)和思考,以及我是如何運(yùn)用這些知識(shí)的撵渡。如果你閱讀了這個(gè)系列中之前的文章融柬,本篇文章的的內(nèi)容將更有意義。

MVC 誕生于 1979 年趋距,它誕生于使用 CLI 用戶(hù)界面的桌面應(yīng)用上下文中粒氧,它暗示如果用戶(hù)外部因素導(dǎo)致數(shù)據(jù)庫(kù)變化,那么 UI 就應(yīng)該自動(dòng)地變化节腐。同樣的模式也可以完美地應(yīng)用在稍后出現(xiàn)的 GUI 桌面應(yīng)用上外盯。

然而,它卻和 Web 應(yīng)用一直在磨合中翼雀,因?yàn)榇蠖鄶?shù) Web 應(yīng)用不會(huì)用 UI 變化來(lái)作為服務(wù)端發(fā)生的變化的后果饱苟,它們總是從 UI 發(fā)起對(duì)服務(wù)端的調(diào)用來(lái)更新界面。

前面我已經(jīng)介紹過(guò) MVC 及其變種()狼渊,而這篇文章將介紹另一個(gè)變種:Resource-Method-Representation箱熬。

我覺(jué)得需要介紹一下這種模式,并不是因?yàn)樵谖业膶?shí)踐中發(fā)現(xiàn)它是一種關(guān)鍵模式狈邑,而是因?yàn)樗?我后面另外要介紹的 ADR 模式常常被混為一談城须。

2008 – Resource-Method-Representation

RMR 由 Paul James 于 2008 年提出,它將 MVC 模式應(yīng)用到了 REST API 上下文之中米苹。

Resource

它的思想是將實(shí)體建模成 REST 資源(Resource酿傍,模式名稱(chēng)中的第一個(gè) R),它只有和 HTTP 方法對(duì)應(yīng)的公有方法:

<?php
// taken from http://www.peej.co.uk/articles/rmr-architecture.html
class Resource {
    private resourceData = [];
    method constructor(request, dataSource) {
        // load data from data source
    }
    method get(request) {
        return new Response(200, getRepresentation(request.url, resourceData));
    }
    method put(request) {
        return new Response(405);
    }
    method post(request) {
        return new Response(405);
    }
    method delete(request) {
        return new Response(405);
    }
}
Resource.php

Method

當(dāng)向 API 發(fā)出一個(gè)請(qǐng)求時(shí)驱入,它被路由給這些業(yè)務(wù)對(duì)象(即資源)中的一個(gè),然后對(duì)應(yīng)這個(gè)請(qǐng)求 HTTP 方法的資源中的一個(gè)方法(Method)被調(diào)用氯析。該業(yè)務(wù)對(duì)象方法接下來(lái)將負(fù)責(zé)返回一個(gè)包含狀態(tài)碼和標(biāo)頭的完整HTTP響應(yīng)亏较。

Representation

以 API 或發(fā)起請(qǐng)求的客戶(hù)端選擇的格式表示的資源就是展現(xiàn)(Representation),這些格式有掩缓,JSON雪情、XML 等等....展現(xiàn)就是由方法創(chuàng)建并返回給客戶(hù)端的響應(yīng)的內(nèi)容,如果有任何需要返回的內(nèi)容的話你辣。

我對(duì)這種模式的看法

MVC 模式是一種展現(xiàn)模式巡通,以一種將模型尘执、領(lǐng)域與用戶(hù)界面分離的方法。這曾經(jīng)是 MVC 的主要目標(biāo)宴凉,現(xiàn)在依然是誊锭。

而 RMR 模式超越了這個(gè)范疇。它告訴我們?nèi)绾卧O(shè)計(jì)我們的業(yè)務(wù)對(duì)象和領(lǐng)域?qū)ο竺殖2粌H如此丧靡,它還告訴我們領(lǐng)域?qū)嶓w應(yīng)該體現(xiàn)傳達(dá)機(jī)制:HTTP 方法。

這就意味著它不只是展現(xiàn)模式籽暇,而是架構(gòu)模式温治,因?yàn)樗绊憫?yīng)用的所有層次。它還意味著以這種模式構(gòu)建的應(yīng)用并非以領(lǐng)域?yàn)橹行慕溆疲且?HTTP 為中心熬荆。我們的實(shí)體最終擁有的是反應(yīng)傳達(dá)機(jī)制而非領(lǐng)域操作的方法。

我認(rèn)為用這種模式構(gòu)建小規(guī)模的 API 是可行的绸狐,但是我不認(rèn)為它可以用在企業(yè)級(jí)應(yīng)用中卤恳,因?yàn)槲蚁嘈牌髽I(yè)級(jí)應(yīng)用需要領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)方法,以及與之相符的以領(lǐng)域?yàn)橹行牡能浖_(kāi)發(fā)策略六孵。

還有纬黎,我完全同意 Anthony Ferrara 所說(shuō)的:

更不用說(shuō)它將自己與 HTTP 緊密地耦合在一起,以至于很難將其映射到 CLI 或 GUI 界面劫窒。

Anthony Ferrara 2014, Alternatives To MVC

引用來(lái)源

2008 – Paul James – Introducing the RMR Web Architecture
2014 – Anthony Ferrara – Alternatives To MVC

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末本今,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子主巍,更是在濱河造成了極大的恐慌冠息,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孕索,死亡現(xiàn)場(chǎng)離奇詭異逛艰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)搞旭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)散怖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人肄渗,你說(shuō)我怎么就攤上這事镇眷。” “怎么了翎嫡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵欠动,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)具伍,這世上最難降的妖魔是什么翅雏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮人芽,結(jié)果婚禮上望几,老公的妹妹穿的比我還像新娘。我一直安慰自己啼肩,他們只是感情好橄妆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著祈坠,像睡著了一般害碾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赦拘,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天慌随,我揣著相機(jī)與錄音,去河邊找鬼躺同。 笑死阁猜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹋艺。 我是一名探鬼主播剃袍,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捎谨!你這毒婦竟也來(lái)了民效?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤涛救,失蹤者是張志新(化名)和其女友劉穎畏邢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體检吆,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舒萎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蹭沛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臂寝。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖摊灭,靈堂內(nèi)的尸體忽然破棺而出咆贬,到底是詐尸還是另有隱情,我是刑警寧澤斟或,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站集嵌,受9級(jí)特大地震影響萝挤,放射性物質(zhì)發(fā)生泄漏御毅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一怜珍、第九天 我趴在偏房一處隱蔽的房頂上張望端蛆。 院中可真熱鬧,春花似錦酥泛、人聲如沸今豆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呆躲。三九已至,卻和暖如春捶索,著一層夾襖步出監(jiān)牢的瞬間插掂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工腥例, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辅甥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓燎竖,卻偏偏與公主長(zhǎng)得像璃弄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子构回,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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

  • .eslintignore 指定哪些文件或者文件夾不進(jìn)行檢查 .eslintrc.js 配置文件夏块,幾個(gè)信息可以配...
    草帽lufei閱讀 3,310評(píng)論 0 0
  • 五個(gè)步驟 第一步:找到你的太陽(yáng),它的“什么”就是個(gè)性的形成捐凭〔Ψ觯看看它所在的星座:為什么這個(gè)人活著?他的進(jìn)化目標(biāo)是什么...
    楊陽(yáng)陽(yáng)6閱讀 626評(píng)論 0 0
  • 青丘山 青丘青雘染茁肠,玉石玉山南患民。 九尾妖狐媚,嬰音鳴道邊垦梆。 行人常被盅匹颤,化作腹中餐。 有鳥(niǎo)如鳩狀托猩,其音...
    詩(shī)呆閱讀 3,218評(píng)論 10 42
  • 英甲千軍震寰宇印蓖, 長(zhǎng)戈橫掃萬(wàn)骨枯; 吾輩當(dāng)飲豪杰血京腥, 亂世重鑄梟雄魂赦肃。 旌旗十萬(wàn)吞天地, 利劍出鞘指華東; 今生自...
    阿北偏東閱讀 356評(píng)論 0 1