日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

阿里巴巴为什么要禁止使用存储过程?

發(fā)布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阿里巴巴为什么要禁止使用存储过程? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

之所以有這個題目,我既不是故意吸引眼球,也不想在本文對存儲過程進行教科書般論述。《阿里巴巴Java開發(fā)手冊》是這樣規(guī)定的:

再結(jié)合我最近項目中遇到的存儲過程問題,所以今天我打算來聊一聊這個問題。需要這份最新完整手冊的去關(guān)注微信公眾號Java技術(shù)棧在后臺回復(fù)手冊獲取。

這事兒要從去年在武漢出差時一位同事的發(fā)問說起,問題是這樣的:

我覺得存儲過程挺好用的,你為什么不建議用呢?

當(dāng)時我好似胸有萬言,但終究沒用一個實在的例子回答同事,只是從結(jié)論上大侃一通,代碼相對于SQL,復(fù)用、擴展、通用性都要更強。想必同事并不信服。

現(xiàn)在想來,我最近正碰到的問題,算是一個可以回答同事的例子吧。

最近項目中有個新需求,需要校驗一個用戶是否有Job,Certification,Disclosure這三個業(yè)務(wù)數(shù)據(jù)。

翻看了代碼發(fā)現(xiàn),系統(tǒng)的用戶個人頁面的C#代碼調(diào)用了三個存儲過程,去抓取用戶的Job,Certification,Disclosure數(shù)據(jù)。

我的新需求,自然需要復(fù)用這三個存儲過程,否則:

若每一處都寫一次抓取數(shù)據(jù)的業(yè)務(wù)邏輯代碼,若業(yè)務(wù)邏輯發(fā)生變化,難以追查和維護所有讀取Job,Certification,Disclosure的SQL。

如果我在C#代碼中調(diào)用這已有的三個存儲過程,事情本該非??炀湍芙Y(jié)束。我也是這么做的。

但code reviewer認(rèn)為,我的需求中,并不需要Job,Certification,Disclosure這三個業(yè)務(wù)對象的數(shù)據(jù)。我只是需要給定用戶是否有Job,Certification,Disclosure而已。

所以我應(yīng)將是否有無Job,Certification,Disclosure的判斷邏輯寫在數(shù)據(jù)庫,最終通過網(wǎng)絡(luò)從數(shù)據(jù)庫傳到web服務(wù)器的僅是true或false,節(jié)省網(wǎng)絡(luò)流量,這樣最好不過了。

也對。除開網(wǎng)絡(luò)性能,從接口設(shè)計的角度講,接口的傳入和返回值,都應(yīng)是你本身需要的數(shù)據(jù),不應(yīng)帶有大量不需要或者需要caller去預(yù)處理的數(shù)據(jù)。從接口語義表達(dá)就可知調(diào)用的目的,這樣代碼可讀性也會有大大提高。

那就動手改。但沒想到的是問題來了。

為了講述問題,我簡化代碼,假設(shè)系統(tǒng)現(xiàn)有的存儲過程如下:

CREATE?PROCEDURE?[dbo].[GetJobs]?? (??@PersonId?int,??@OrganizaitionId?int?? )?? AS?? BEGIN??SELECT?JobId,JobName,JobType?FROM?Job?WHERE?PersonId?=?@PersonId?AND?OrganizaitionId?=?@OrganizaitionId?? END??

我在新的存儲過程中調(diào)用它,我需要獲得該person的jobs的數(shù)量,即GetJobs返回結(jié)果集的count。

為了實現(xiàn)這一目的,首先想到的是使用臨時表,將返回結(jié)果集存入臨時表,再對其進行count(*)的計數(shù)操作:

CREATE?PROCEDURE?[dbo].[MyProc]?? (?? @PersonId?int,?? @OrganizaitionId?int,?? )?? AS?? BEGIN?? CREATE?TABLE?#Temp(?? PersonId?int,?? OrganizaitionId?int?? )??INSERT?INTO?#Temp?EXEC?dbo.GetJobs?? @PersonId?=?@PersonId,?? @ParentOrgId?=?@ParentOrgId??SELECT?COUNT(*)?FROM #Temp?? END??

這種辦法簡單有效,但它存在嚴(yán)重的維護問題。未來如果被調(diào)用的存儲過程的返回結(jié)果集字段有變動,那么MyProc中的臨時表結(jié)構(gòu)也需要隨之變化。這是令人難以接受的。

那么將MyProc中的INSERT INTO換為SELECT INTO呢?很遺憾,答案是不行。SQL本身并不支持這種用法。

給現(xiàn)有存儲過程GetJobs加output參數(shù)?本例中因為GetJobs已被其他多處代碼或SQL scripts調(diào)用,所以對現(xiàn)有現(xiàn)有存儲過程進行改動會有不小風(fēng)險。

我搜遍網(wǎng)絡(luò),一位MS MVP的大神的文章幾乎總結(jié)了所有存儲過程之間傳遞數(shù)據(jù)的方法: How to Share Data between Stored Procedures。他在文章中也無可奈何地說道

Keep in mind that compared to languages such as C# and Java, Transact-SQL is poorly equipped for code reuse, why solutions in T?SQL to reuse code are clumsier.

最終我沒能找到一種滿意的辦法,無奈之下我在新寫的存儲過程中將查詢Jobs的語句寫一了次。

存儲過程在很多場景時有其優(yōu)勢,比如性能。但對于業(yè)務(wù)邏輯的通用方法,非常不推薦將其寫在存儲過程中,代碼復(fù)用、擴展與客戶端語言比,相差甚遠(yuǎn)。也許終究能實現(xiàn),但代價與風(fēng)險比客戶端語言要高,得不償失。

天知道還有沒有機會和那位前同事再討論這一話題呢。需要這份最新完整手冊的去關(guān)注微信公眾號Java技術(shù)棧在后臺回復(fù)手冊獲取。

作者:楊洋的圍脖啊 ??
segmentfault.com/a/1190000011138993

總結(jié)

以上是生活随笔為你收集整理的阿里巴巴为什么要禁止使用存储过程?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色片一区二区三区 | 一个人在线观看www www.97色 | 久久窝窝| 国产在线视频你懂的 | 久久这里只有精品首页 | 午夜寂寞福利 | 亚洲精品xxxx| av一区在线观看 | 久久久久久久久久成人 | 就要操av | 深夜影院深a | 久久精品伦理 | 一级片在线免费观看视频 | 久久性色av | 奇米四色网 | 国产精品国产三级国产专区53 | 日本在线网址 | 肉色超薄丝袜脚交一区二区图片 | 中文字幕av免费观看 | 亚洲成年 | 亚洲欧洲精品视频 | 午夜粉色视频 | 日韩一区二区不卡视频 | www.久久网 | 波多野结衣一区二 | 91人人草 | 射一射 | 滋润少妇h高h | 91在线一区二区三区 | 日韩一区二区三区在线播放 | 蜜桃精品视频在线 | 欧美一区二区三区国产 | 在线观看免费小视频 | 亚洲精品乱码久久久久久按摩观 | xxx69美国| 69av导航 | 成年人的毛片 | www.视频一区 | 在线资源站 | 免费毛片看 | av影院在线 | 日本精品视频在线 | 欧美日韩一区免费 | 国产日韩欧美成人 | 宅男深夜视频 | 光棍影院一区二区 | 欧美一级一级 | 女人扒开屁股让我添 | 韩国三级在线视频 | 奇米中文字幕 | 欧美一区二区三区啪啪 | 色综合久久精品亚洲国产 | 国产春色 | 日韩性在线| 精品人妻天天爽夜夜爽视频 | 欧美福利小视频 | 黄色免费在线观看视频 | 麻豆av免费在线观看 | 免费看欧美大片 | 日本欧美三级 | 国产精品自拍一区 | 最新超碰在线 | 57pao国产成永久免费视频 | 中文字幕无码精品亚洲35 | 成人免费看片98 | 中文字幕人妻熟女人妻a片 麻豆91视频 | 黄视频免费在线观看 | 一区二区成人免费视频 | xx性欧美肥妇精品久久久久久 | 超碰成人福利 | 日韩毛片高清在线播放 | 亚洲成人另类 | 国产自偷自拍视频 | 乖女从小调教h尿便器小说 欧美韩一区二区 | 亚洲激情成人 | 色人天堂 | avtt一区| 亚洲视频一区二区三区四区 | 高潮无码精品色欲av午夜福利 | 久草久热 | 午夜刺激视频 | 91精品国产高清一区二区三密臀 | www.97ai.com| 午夜免费高清视频 | 国产v亚洲v天堂无码久久久 | 韩国美女主播跳舞 | 国产香蕉一区 | 亚洲激情一区二区三区 | 欧美自拍视频在线观看 | 欧美福利第一页 | 免费看av毛片 | 体内射精一区二区 | 88福利视频 | 岛国av毛片| 国内自拍小视频 | 2019日韩中文字幕mv | 一级黄视频| 欧美日韩免费在线视频 | 中文字幕a√|