精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何應(yīng)對不斷膨脹的接口

開發(fā) 前端
難怪碼農(nóng)自嘲是 CRUD boy, 每天確實(shí)在不斷的堆屎,在別人的屎山上縫縫補(bǔ)補(bǔ)。下面的案例并沒有 blame 任何人的意思,我也是堆屎工^^ 如有雷同,請勿對號入座。

 [[442573]]

本文轉(zhuǎn)載自微信公眾號「董澤潤的技術(shù)筆記」,作者董澤潤。轉(zhuǎn)載本文請聯(lián)系董澤潤的技術(shù)筆記公眾號。

難怪碼農(nóng)自嘲是 CRUD boy, 每天確實(shí)在不斷的堆屎,在別人的屎山上縫縫補(bǔ)補(bǔ)。下面的案例并沒有 blame 任何人的意思,我也是堆屎工^^ 如有雷同,請勿對號入座

案例

最近讀一個(gè)業(yè)務(wù)代碼,狀態(tài)機(jī)接口定義有 40 個(gè)函數(shù),查看 commit log, 初始只有 10 個(gè),每當(dāng)增加新的業(yè)務(wù)需求時(shí),就不斷的在原接口添加

  1. // OrderManager handles operation on order entity 
  2. type OrderManager interface { 
  3.  LoadOrdersByIDs(ctx context.Context, orderIDs []string) ([]*dbentity.Order, error) 
  4.   ...... 
  5.   TransitOrdersToState(ctx context.Context, orderIDs []string, toState orderstate.OrderState) ([]*dbentity.Order, error) 
  6.   ...... 
  7.  Stop() error 

業(yè)務(wù)中很多 interface 都是用來 mock UT, 實(shí)現(xiàn)依賴反轉(zhuǎn),而不是業(yè)務(wù)多態(tài)。OrderManager 就屬于這類,所以接口膨脹后對工程質(zhì)量影響并不大,就是看著不內(nèi)聚...

接口為什么要小

The bigger the interface, the weaker the abstraction.

Go Proverbs[1] Rob Pike 提到:接口越大,抽像能力越弱,比如系統(tǒng)庫中的 io.Reader, io.Writer 等等接口定義只有一兩個(gè)函數(shù)。為什么說接口要小呢?舉個(gè)例子

  1. type FooBeeper interface { 
  2.   Bar(s string) (string, error) 
  3.   Beep(s string) (string, error) 
  4.  
  5. type thing struct{} 
  6.  
  7. func (l *thing) Bar(s string) (string, error) { 
  8.   ... 
  9.  
  10. func (l *thing) Beep(s string) (string, error) { 
  11.   ... 
  12.  
  13. type differentThing struct{} 
  14.  
  15. func (l *differentThing) Bar(s string) (string, error) { 
  16.   ... 
  17.  
  18. type anotherThing struct{} 
  19.  
  20. func (l *anotherThing) Beep(s string) (string, error) { 
  21.   ... 

接口 FooBeeper 定義有兩個(gè)函數(shù): Bar, Beep. 由于接口實(shí)現(xiàn)是隱式的,我們有如下結(jié)論:

  • thing 實(shí)現(xiàn)了 FooBeeper 接口
  • differentThing 沒有實(shí)現(xiàn),缺少 Bar 函數(shù)
  • anotherThing 同樣沒有實(shí)現(xiàn),缺少 Beep 函數(shù)

但是如果我們把 FooBeeper 打散也多個(gè)接口的組合

  1. type FooBeeper interface { 
  2.  Bar 
  3.  Beep 
  4.  
  5. type Bar interface { 
  6.  Bar(s string) (string, error) 
  7.  
  8. type Beep interface { 
  9.  Beep(s string) (string, error) 

如上述定義,就可以將接口做小,使得 differentThing anotherThing 可以復(fù)用接口

組合改造

關(guān)于如何改造 OrderManger 可以借鑒 etcd client v3[2] 定義的思想,將相關(guān)的功能聚合成小接口,通過接口的組合實(shí)現(xiàn)

  1. type Client struct { 
  2.  Cluster 
  3.  KV 
  4.  Lease 
  5.  Watcher 
  6.  Auth 
  7.  Maintenance 
  8.  
  9.  conn *grpc.ClientConn 
  10.  
  11.  cfg      Config 
  12.   ...... 

上面是 clientV3 結(jié)構(gòu)體定義,雖然不是接口,但是思想可以借鑒

  1. // OrderManager handles operation on order entity 
  2. type OrderManager interface { 
  3.  OrderOperator 
  4.  TransitOrders 
  5.  Stop() error 

實(shí)際上可能接口只需抽成三個(gè),OrderOperator 負(fù)責(zé)對 orders 的 CRUD 操作,TransitOrders 負(fù)責(zé)轉(zhuǎn)態(tài)機(jī)流轉(zhuǎn),原來的 40 個(gè)函數(shù)函數(shù)都放到小接口里面

冗余改造

只抽成小接口是不行的,LoadOrderByXXXX 有一堆定義,根據(jù)不同條件獲取訂單,但實(shí)際上這些都是可以轉(zhuǎn)換的

  1. func LoadOrders(ctx context.Context, FiltersParams options...) 

針對這種情況可以傳入 option, 或是用結(jié)構(gòu)體當(dāng)成參數(shù)容器。再比如狀態(tài)機(jī)流轉(zhuǎn)有 TransitOrdersToState, TransitOrdersToStateByEntity, TransitOrdersStateByEntityForRegularDelivery 均屬于冗余定義

還有一種冗余接口是根本沒人用,或是不該這層暴露的

預(yù)防

接口拆分本質(zhì)上是 ISP Interface segregation principle[3], 不應(yīng)該強(qiáng)迫任何代碼依賴它不使用的方法。IT 行業(yè)有一個(gè)笑話

當(dāng)你的 MR 只有幾行時(shí),peer 會(huì)提出幾十個(gè) comment. 但是當(dāng)你的 MR 幾百行時(shí),他們只會(huì)回復(fù) LGTM

Peer review 還是要有責(zé)任心的,如果成本不高,建議順手把老代碼重構(gòu)一下。重構(gòu)代碼有幾項(xiàng)原則,可以參考 重構(gòu)最佳實(shí)踐2

CI lint 不知道是否支持檢查 interface 行數(shù),但是如果行數(shù)成為指標(biāo),可能又本末倒置了

參考資料

[1]Go Proverbs: https://go-proverbs.github.io/,

[2]etcd client v3: https://github.com/etcd-io/etcd/blob/main/client/v3/client.go#L44,

[3]Interface segregation principle: https://en.wikipedia.org/wiki/Interface_segregation_principle,

 

 

 

責(zé)任編輯:武曉燕 來源: 董澤潤的技術(shù)筆記
相關(guān)推薦

2023-11-14 16:43:17

云計(jì)算數(shù)據(jù)中心

2023-11-09 11:48:41

2021-09-03 15:03:33

數(shù)據(jù)安全安全風(fēng)險(xiǎn)網(wǎng)絡(luò)安全

2015-05-08 12:41:40

2024-10-31 09:51:28

2025-02-26 07:20:07

2019-11-13 13:37:28

安全內(nèi)部威脅數(shù)據(jù)

2022-08-01 12:03:43

首席信息官CIOIT

2024-05-06 08:43:00

2022-07-31 00:10:14

數(shù)據(jù)安全工具數(shù)據(jù)泄露

2012-11-14 16:27:41

2022-05-24 10:19:15

網(wǎng)絡(luò)中斷網(wǎng)絡(luò)

2009-09-24 16:56:12

2020-08-04 10:49:26

云遷移云計(jì)算云平臺

2021-09-07 12:17:58

網(wǎng)絡(luò)攻擊漏洞網(wǎng)絡(luò)安全

2025-07-02 07:25:00

大型語言模型LLM人工智能

2020-01-06 22:56:39

物聯(lián)網(wǎng)安全可穿戴設(shè)備

2010-04-08 12:43:28

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

色欧美片视频在线观看在线视频| 成人国产精品视频| 日韩中文在线视频| 小日子的在线观看免费第8集| 七七久久电影网| 成人动漫一区二区三区| 国产精品久久久999| 青青操在线视频观看| 激情亚洲另类图片区小说区| 日本高清无吗v一区| 路边理发店露脸熟妇泻火| 偷拍精品一区二区三区| 卡一卡二国产精品| 性亚洲最疯狂xxxx高清| 99re6热在线精品视频| 黄色网一区二区| 欧美日韩精品一区二区三区| 精品少妇人妻av免费久久洗澡| 最新真实国产在线视频| 成人av在线播放网址| 国产欧美日韩中文字幕在线| 久热这里只有精品6| 中国成人一区| 日韩在线视频播放| 四虎永久免费在线观看| 综合中文字幕| 7777精品伊人久久久大香线蕉的 | 隣の若妻さん波多野结衣| 99综合精品| 久久精视频免费在线久久完整在线看| 特大黑人巨人吊xxxx| 精品一区二区三区亚洲| 欧美三级中文字| av天堂永久资源网| 懂色av一区| 一区二区三区在线影院| 亚洲一区二区三区免费看| 清纯唯美亚洲色图| 99久久99久久久精品齐齐| 91精品国产高清久久久久久91裸体| 国产91av在线播放| 久热精品在线| 欧洲亚洲女同hd| 日韩三级视频在线| 欧美精品午夜| 欧美国产在线视频| 美女视频黄免费| 亚洲色图网站| 久久视频在线看| 国产suv精品一区二区68| 日韩www.| 精品国产欧美一区二区五十路| av永久免费观看| 精品国产一区二区三区久久久蜜臀 | 国产日韩精品一区二区三区| 久久久久天天天天| 亚洲av毛片成人精品| 91在线观看视频| 免费亚洲一区二区| 国产在线高清| 国产精品丝袜久久久久久app| 日韩免费av电影| www.黄在线观看| 国产精品麻豆久久久| 中文字幕剧情在线观看一区| 免费在线观看av网站| 亚洲人精品午夜| 黄色网在线视频| 岛国片av在线| 一本色道久久综合狠狠躁的推荐| 男女午夜激情视频| 欧美一级做a| 91精品国产aⅴ一区二区| 国偷自产av一区二区三区麻豆| 综合激情网...| 日韩精品欧美国产精品忘忧草| 在线 丝袜 欧美 日韩 制服| 精品国产一区探花在线观看| 最新中文字幕亚洲| 免费在线一级片| 国产精品人人爽人人做我的可爱| 国产精品久久久久久久久久东京| 这里只有精品9| 国产69精品久久777的优势| 久久精品成人一区二区三区蜜臀| 福利在线视频导航| 亚洲欧美欧美一区二区三区| 国产婷婷一区二区三区| 91看片一区| 日韩欧美一级片| www.色多多| 天堂美国久久| 茄子视频成人在线| 国产精品一区二区三区在线免费观看 | 天堂а在线中文在线无限看推荐| 国产午夜精品一区二区| 路边理发店露脸熟妇泻火| 天堂√中文最新版在线| 717成人午夜免费福利电影| av电影在线播放| 日韩成人三级| 91av在线播放视频| 国产精品无码免费播放| 久久婷婷成人综合色| 超碰10000| 成人国产精选| 亚洲国产精品美女| 国产大片免费看| 三级在线观看一区二区 | 精品国产免费无码久久久| 久久日韩粉嫩一区二区三区| 四虎精品欧美一区二区免费| 欧美一区久久久| 精品国产欧美一区二区| 小早川怜子一区二区的演员表| 国产视频一区三区| 91精品久久香蕉国产线看观看| 可以在线观看的黄色| 亚洲国产成人精品视频| 国产美女视频免费看| 国产探花在线精品| 97av在线影院| 国产综合在线播放| 亚洲欧美区自拍先锋| 中国黄色片免费看| 一道在线中文一区二区三区| 欧美激情在线视频二区| 国产欧美熟妇另类久久久| 国产欧美日韩一区二区三区在线观看| 国产亚洲综合视频| 精品一区二区男人吃奶| 九九热这里只有在线精品视| 91精品国产色综合久久不8| 久久久一区二区| 欧美爱爱视频免费看| 精品福利网址导航| 欧美激情高清视频| 亚洲精品一区二区三区区别| 亚洲欧美日韩人成在线播放| 亚洲精品综合在线观看| 欧美一级淫片| 国产国产精品人在线视| 浮生影视网在线观看免费| 欧美日韩在线视频首页| 国产激情视频网站| 国产精品日韩| 久久综合一区| 亚洲1234区| 亚洲香蕉成视频在线观看| 国语对白永久免费| 91在线观看污| 人妻丰满熟妇av无码区app| 一区二区三区视频免费观看| 日本久久久久久久久久久| 日韩在线免费播放| 一本久久综合亚洲鲁鲁五月天| 国产麻豆天美果冻无码视频| 亚洲激情二区| 久久精品人人做人人爽电影| 三上悠亚国产精品一区二区三区| 亚洲区免费影片| 最近中文字幕在线视频| 国产精品剧情在线亚洲| 亚欧精品在线视频| 亚洲激情黄色| 欧美一级二级三级九九九| 成人在线中文| 欧美大尺度激情区在线播放| 欧美熟妇另类久久久久久不卡| 天天综合天天综合色| 欧美图片一区二区| 久久精品国产久精国产爱| 中文字幕精品在线播放| 老司机aⅴ在线精品导航| 日本国产一区二区三区| 人人干在线视频| 欧美xfplay| 精品国产乱子伦| 综合久久给合久久狠狠狠97色 | 中文字幕乱码人妻二区三区| 亚洲免费成人av| 鲁大师私人影院在线观看| 日韩不卡手机在线v区| 日日噜噜夜夜狠狠久久丁香五月| 欧美丝袜美腿| 成人精品久久一区二区三区| 99久久精品免费看国产小宝寻花| 亚洲欧美日韩久久久久久| 888奇米影视| 天天综合色天天综合色h| 黑人操日本美女| www.成人网.com| 日本不卡一区二区在线观看| 在线日韩欧美| 在线免费一区| 日本欧美高清| 51国偷自产一区二区三区的来源| 亚洲最大网站| 精品少妇一区二区30p| 国产黄在线观看免费观看不卡| 91精品国产综合久久久久 | 7777精品伊人久久久大香线蕉最新版 | 国产日韩精品在线| 欧美少妇精品| 欧美男插女视频| 日韩av中文| 亚洲精品小视频| 不卡视频免费在线观看| 欧美三区在线视频| 欧美在线观看不卡| 亚洲综合一区二区| 免费在线观看a级片| 久久精品欧美日韩精品| 亚洲一区二区三区黄色| 九九久久精品视频| 无码人妻精品一区二区三区66| 亚洲午夜久久久久久尤物| 在线免费一区| 成人羞羞网站入口| 欧美污视频久久久| 欧美一区二区三区红桃小说| 99re在线| 精品一区二区三区免费看| 国产精品一区二区3区| 婷婷午夜社区一区| 2024亚洲男人天堂| www.youjizz.com在线| 久国内精品在线| 久久五月精品| 日日噜噜噜夜夜爽亚洲精品 | 久久影视电视剧免费网站清宫辞电视 | 中文字幕视频在线免费欧美日韩综合在线看 | 久久久午夜精品| 中文字幕一区二区三区人妻不卡| 成人精品小蝌蚪| 亚洲欧美日韩偷拍| 成人app下载| 娇妻高潮浓精白浆xxⅹ| 国产成人精品一区二区三区四区| 国产三级生活片| 国产综合色精品一区二区三区| 99热一区二区| 久久成人免费电影| 成人亚洲免费视频| 激情成人综合网| 中文字幕亚洲影院| 韩国午夜理伦三级不卡影院| 亚洲成人手机在线观看| 美女网站一区二区| 久热在线视频观看| 激情综合一区二区三区| 中文字幕55页| 国产大片一区二区| 深田咏美中文字幕| 91视频国产资源| 蜜臀久久99精品久久久久久| 国产欧美一区二区三区沐欲 | 国产视频精品久久| 最近2019中文字幕mv免费看 | 国产精品入口夜色视频大尺度| 欧美日韩国产网站| 国产在线观看一区二区三区| 成人免费观看49www在线观看| 99久久综合狠狠综合久久止 | 四虎成人在线| 国产欧美一区二区白浆黑人| av在线播放一区二区| 99久久综合狠狠综合久久止| 婷婷亚洲成人| 亚洲精品国产一区| 欧美成人有码| 国产中文字幕二区| 日韩国产欧美在线观看| 国产精品嫩草影院8vv8| 成人午夜av电影| 在哪里可以看毛片| 亚洲图片欧美激情| 99视频在线看| 欧美日韩国产片| 国产 日韩 欧美 综合| 亚洲欧洲xxxx| h片在线播放| 国产91精品视频在线观看| 国产成人毛片| 好吊色欧美一区二区三区| 欧美在线色图| 福利视频一区二区三区四区| 久久久久国内| 性一交一黄一片| 国产日本一区二区| 久久久久久久福利| 在线中文字幕一区二区| 成人黄色在线观看视频| 亚洲人成网站999久久久综合| 九义人在线观看完整免费版电视剧| 欧美激情视频一区二区| 成人涩涩视频| 国产欧美一区二区在线播放| 91蜜臀精品国产自偷在线| 日韩五码在线观看| 国产一区二区三区免费看 | 精品日韩在线| 精品国产av无码一区二区三区| 三级精品在线观看| 亚洲欧美日韩色| 中文字幕视频一区二区三区久| 久久夜靖品2区| 欧美一区二区三区免费观看视频| 九一国产在线| 久久全球大尺度高清视频| 自拍偷拍亚洲| 亚洲国产日韩欧美| 午夜一区不卡| 91九色蝌蚪porny| 亚洲免费高清视频在线| 亚洲视频在线观看免费视频| 日韩精品极品视频免费观看| 色呦呦在线看| 91网站免费看| 色135综合网| 激情视频综合网| 久久久亚洲综合| 91video| 亚洲精品www久久久久久广东| a黄色片在线观看| 成人欧美一区二区三区在线| 成人看的视频| 最新中文字幕免费视频| 久久精品人人做人人综合 | 久久久久一区二区| 日韩午夜免费视频| 特级特黄刘亦菲aaa级| 一区二区三区中文在线观看| 国产乱人乱偷精品视频a人人澡| 在线观看精品国产视频| 二吊插入一穴一区二区| 欧美精品尤物在线| 久久久久久夜| 蜜桃无码一区二区三区| 色综合天天天天做夜夜夜夜做| 亚洲色欧美另类| 97不卡在线视频| 精品一区欧美| 日本成人中文字幕在线| 国产欧美一二三区| 在线观看一二三区| 日韩视频免费在线观看| 2019中文亚洲字幕| 最近免费观看高清韩国日本大全| 国产一区中文字幕| 国产这里有精品| 亚洲国产精品va在线| 手机在线理论片| 精品无码久久久久国产| 亚洲免费在线| 少妇愉情理伦三级| 欧美夫妻性生活| 欧美aaa免费| 国产一区高清视频| 天堂av在线一区| 亚洲AV成人无码网站天堂久久| 欧美日韩一区二区三区四区| 久热国产在线| 韩国成人一区| 日韩和欧美的一区| 无码人妻精品一区二区三区夜夜嗨| 欧美一区二区精品| 国产美女精品写真福利视频| 欧美日韩电影一区二区三区| 久久综合网络一区二区| www.97视频| 亚洲白拍色综合图区| 日韩毛片免费观看| 国产高潮呻吟久久久| 成人国产精品免费观看动漫| www.色国产| 久久久久www| 久久狠狠久久| 欧美日韩亚洲自拍| 一区二区三区资源| 少妇性bbb搡bbb爽爽爽欧美| 国产噜噜噜噜噜久久久久久久久 | 另类小说第一页| 亚洲欧美福利一区二区| 色呦呦中文字幕| 国产欧美日韩中文字幕| 亚洲日本黄色| 男人的午夜天堂| 亚洲国产精品电影| 91亚洲精品| 亚洲人精品午夜射精日韩| 国产精品欧美精品| 色婷婷在线视频| 成人情趣片在线观看免费| 亚洲一区日韩| 久久久久成人精品无码| 一本色道久久88精品综合| 国产精品nxnn| 伊人免费视频二| 色综合久久久网|