精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

一道本在线观看| 日本日本19xxxⅹhd乱影响| 亚洲最大成人av| 最新欧美人z0oozo0| 日韩欧美二区三区| 国产女女做受ⅹxx高潮| 欧美成人高清在线| 成人网在线免费视频| 国产成人亚洲综合91| 日韩高清dvd碟片| 色天下一区二区三区| 欧美精品v日韩精品v韩国精品v| 日本免费在线视频观看| 日本一卡二卡四卡精品| 国产一区二区三区精品视频| 日韩免费在线视频| 国产一级一片免费播放| 日本久久精品| 日韩精品视频中文在线观看| 亚洲成人福利在线| 欧美裸体视频| 亚洲影院在线观看| 亚洲精品一区二区三区蜜桃久| 内射后入在线观看一区| 久久99国产精品免费网站| 68精品久久久久久欧美| 毛片aaaaa| 欧美mv日韩| 亚洲香蕉伊综合在人在线视看| 麻豆免费在线观看视频| 婷婷丁香久久| 欧美性生活久久| 日韩视频第二页| 高清电影在线免费观看| 自拍av一区二区三区| 日韩精品av一区二区三区| 婷婷在线观看视频| 国产91精品一区二区麻豆网站| 成人国产精品色哟哟| 91porny九色| 午夜在线观看免费一区| 午夜精品久久久久久久久久久久| 天天综合天天做| 色777狠狠狠综合伊人| 亚洲片av在线| 无码熟妇人妻av| 日韩成人av在线资源| 欧美刺激脚交jootjob| 一级日本黄色片| 国产亚洲久久| 日韩三级视频在线观看| 国产精品熟女一区二区不卡| 成人污污视频| 欧美一区二区视频网站| 亚洲18在线看污www麻豆| 久久久久黄色| 欧美疯狂做受xxxx富婆| 欧美日韩理论片| 超碰国产精品一区二页| 91麻豆精品国产自产在线| www.se五月| 亚洲伊人精品酒店| 91精品国产综合久久精品麻豆| 污网站在线免费| 欧美日本三级| 亚洲精品一区在线观看| 亚洲精品中文字幕在线播放| 日韩精品丝袜美腿| 亚洲精品网址在线观看| 亚洲第一综合网| 久久福利影院| 欧美人交a欧美精品| 久久久久久久久久久久久久免费看| 激情久久久久| 日韩av免费在线观看| 中文天堂在线播放| 国产美女娇喘av呻吟久久| 成人在线观看av| 亚洲色图21p| 亚洲国产精品高清| 97精品国产97久久久久久粉红| 自由的xxxx在线视频| 亚洲电影中文字幕在线观看| av网站在线观看不卡| 四虎国产精品免费久久5151| 日韩美一区二区三区| 中国av免费看| 久久亚洲在线| 午夜精品一区二区三区视频免费看 | 国产精品羞羞答答xxdd| 国产一区二区久久久| 二区在线观看| 亚洲一区二区偷拍精品| 欧美精品成人网| 日韩av综合| 亚洲天堂男人天堂| 欧美日韩在线国产| 久久久精品午夜少妇| 96国产粉嫩美女| 青春有你2免费观看完整版在线播放高清| 日本一区二区三区久久久久久久久不 | 色老综合老女人久久久| 日本网站在线看| 免费av一区| 欧美高清在线播放| 中国精品一区二区| 不卡一区中文字幕| 中文字幕一区二区中文字幕| 无遮挡爽大片在线观看视频 | 国产99久久久欧美黑人| www日本在线| 国产精品色噜噜| 久久网站免费视频| 亚洲国产中文在线二区三区免| 亚洲社区在线观看| 国产成年人免费视频| 捆绑调教一区二区三区| 快播亚洲色图| 99热99re6国产在线播放| 欧美群妇大交群中文字幕| av网站免费在线播放| 欧美日韩四区| 成人免费在线网址| a视频网址在线观看| 欧美视频在线免费看| 欧美图片自拍偷拍| 91精品国产自产在线观看永久∴ | 免费的毛片视频| 成年人网站91| 日本中文字幕在线视频观看| www 久久久| 中文字幕亚洲专区| 中文字幕一区二区人妻视频| 99视频精品在线| 日本男女交配视频| 日韩一二三区| 久久视频免费在线播放| 亚洲熟妇av乱码在线观看| 久久精品欧美一区二区三区不卡 | 精品一区二区三区免费播放| 婷婷久久青草热一区二区 | 国产精品人人做人人爽| 亚洲天堂网一区二区| 久久成人福利| 色综合色综合网色综合| 国产精品久久久久久久免费 | 精品一区二区日韩| 亚洲 日韩 国产第一区| 成人全视频在线观看在线播放高清| 精品无人国产偷自产在线| 国偷自拍第113页| 99久久婷婷国产| 国模吧无码一区二区三区 | 亚洲精品9999| 狠狠久久综合| 久久综合九色九九| 国产黄色av片| 午夜精品久久久久久久久久久| 性高潮免费视频| 中文日韩欧美| 欧美一区二区三区电影在线观看| 欧美色999| www.久久久久久.com| 99这里有精品视频| 亚洲国产日韩a在线播放| 国产亚洲色婷婷久久99精品91| 亚洲欧美卡通另类91av| 午夜精品美女久久久久av福利| 成人日韩av| 欧美激情亚洲另类| 色av男人的天堂免费在线| 在线观看亚洲一区| 在线观看亚洲网站| av一区二区三区在线| 黄色片一级视频| 日韩在线精品| 国产偷国产偷亚洲高清97cao| 蜜桃视频m3u8在线观看| 一区二区三区在线播放欧美| 国产视频在线免费观看| 性做久久久久久| 成人片黄网站色大片免费毛片| 免费成人美女在线观看.| 黄色网络在线观看| 日本成人7777| 国产在线视频2019最新视频| av成人 com a| 正在播放国产一区| 亚洲精品一区二区口爆| 在线亚洲一区观看| 国内偷拍精品视频| 久久精品网站免费观看| 992kp免费看片| 蜜桃视频一区| 日韩欧美猛交xxxxx无码| 美女精品一区最新中文字幕一区二区三区| 国产精品专区第二| sm在线播放| 日韩有码在线电影| 婷婷综合激情网| 日韩欧美在线综合网| 久久亚洲精品石原莉奈 | 一区二区三区美女xx视频| 国产特级aaaaaa大片| 91黄视频在线| 日韩欧美不卡视频| 亚洲特黄一级片| 亚洲理论片在线观看| 成人免费视频一区| 制服丝袜中文字幕第一页 | 欧美视频亚洲图片| 老司机午夜精品视频在线观看| 女人床在线观看| 日韩一区二区中文| 欧美视频观看一区| 久久成人福利| 国产精品三区www17con| 免费一级欧美片在线观看网站| 青青草国产精品一区二区| 牛牛在线精品视频| 久久久精品网站| 亚洲麻豆精品| 一本色道久久综合狠狠躁篇的优点 | 国内自拍亚洲| 国产精品jvid在线观看蜜臀| 男人av在线播放| 欧美疯狂做受xxxx高潮| 国产素人视频在线观看| 日韩一区av在线| jizz在线观看视频| 国产视频亚洲精品| 少妇高潮一区二区三区69| 日韩欧美www| 99视频免费看| 日韩一区二区三区视频在线| 国产视频手机在线| 在线播放日韩导航| 97成人免费视频| 欧美日韩国产bt| 在线观看免费高清视频| 欧美视频中文字幕| 亚洲视频在线观看一区二区| 欧美日韩国产免费| 在线免费观看一级片| 精品视频在线免费观看| 亚洲综合精品国产一区二区三区| 在线观看精品一区| 在线播放精品视频| 欧美猛男男办公室激情| 国产原创中文av| 91麻豆精品国产综合久久久久久| 国产精品高潮呻吟AV无码| 88在线观看91蜜桃国自产| 国产农村妇女毛片精品久久| 欧美一区二区三区视频免费播放| 国产三级漂亮女教师| 日韩手机在线导航| 色哟哟国产精品色哟哟| 亚洲久久久久久久久久| 番号在线播放| 久久精品国产69国产精品亚洲| av毛片在线| 久久久免费精品| 久久人体大尺度| 国产乱肥老妇国产一区二| www一区二区三区| 国产精品国产精品| 婷婷精品在线| 先锋在线资源一区二区三区| 888久久久| 国产日韩欧美精品在线观看| 爽好多水快深点欧美视频| 欧美成人福利在线观看| 国产精品亚洲一区二区三区妖精| 在线播放第一页| 久久久.com| 伊人在线视频观看| 五月天国产精品| 中文字幕永久在线观看| 欧美sm美女调教| 久久经典视频| 久久99热精品这里久久精品| 亚洲永久av| 91夜夜揉人人捏人人添红杏| 国产成人一二片| 午夜精品电影在线观看| 一区在线观看| 亚洲xxx在线观看| 成人午夜电影网站| 九九热免费在线| 午夜欧美一区二区三区在线播放| 无码人妻一区二区三区线| 91精品国产色综合久久ai换脸| 无套内谢的新婚少妇国语播放| 在线成人免费网站| 日本动漫同人动漫在线观看| 国产成人午夜视频网址| 成人h动漫免费观看网站| 色噜噜色狠狠狠狠狠综合色一 | 中文字幕国产一区| 久久精品国产亚洲av香蕉| 欧美视频一区二区在线观看| 色婷婷视频在线| 九色精品免费永久在线| 成人做爰免费视频免费看| 狠狠色噜噜狠狠色综合久| 亚洲九九在线| 一本久道综合色婷婷五月| 国产**成人网毛片九色| 林心如三级全黄裸体| 狠狠干狠狠久久| 亚洲国产精品国自产拍久久| 日韩资源在线观看| av高清不卡| 国产精品免费区二区三区观看| 99tv成人| 日韩欧美在线免费观看视频| 成人av免费观看| 欧美日韩中文字幕在线观看| 欧美三级视频在线观看| 免费一级在线观看| 17婷婷久久www| 国产精品网站在线看| av 日韩 人妻 黑人 综合 无码| 久久99久久精品| 五月天精品在线| 色狠狠一区二区| 美国成人毛片| 热草久综合在线| 日韩在线黄色| www国产精品内射老熟女| 成人免费视频一区二区| 精品亚洲永久免费| 欧美成人伊人久久综合网| 成人在线直播| 91手机视频在线观看| 亚洲91视频| 日日夜夜精品视频免费观看| 亚洲男人电影天堂| 国产三级午夜理伦三级| 美女精品视频一区| 国产高清亚洲| wwwwww欧美| 成人激情免费电影网址| 亚洲欧美在线观看视频| 亚洲黄色有码视频| 国产精品高颜值在线观看| 久久精品日产第一区二区三区精品版| 亚洲高清成人| 性色av蜜臀av色欲av| 黑人欧美xxxx| av在线女优影院| 成人网页在线免费观看| 欧美一区二区三区久久精品茉莉花| 五月天婷婷在线观看视频| 一区二区三区四区在线免费观看 | 久久精品夜夜夜夜久久| 黄色大全在线观看| 日韩一中文字幕| 99久久人爽人人添人人澡| 蜜臀av无码一区二区三区| 91麻豆6部合集magnet| 波多野结衣黄色| 日韩中文字幕国产精品| 美国十次综合久久| 日韩欧美国产综合在线| 国产拍欧美日韩视频二区| 国产伦理吴梦梦伦理| 欧美激情视频一区二区三区不卡| 狼人精品一区二区三区在线 | 国产一区二三区| 国产一级免费av| 亚洲美女在线视频| 国产精品久久久久77777丨| a级片一区二区| 久久综合九色综合欧美98| 亚洲天堂手机版| 欧美激情视频免费观看| 欧美精品momsxxx| 中文字幕一区二区在线观看视频 | 国产男女激情视频| 日韩美女久久久| 特黄aaaaaaaaa真人毛片| 国产精品女主播| 一区免费视频| 中国美女黄色一级片| 亚洲国产精久久久久久| jvid一区二区三区| 日本阿v视频在线观看| 国产欧美一区二区在线观看| 北条麻妃一二三区| 国产成人精品日本亚洲| 欧美精品观看| 久久婷婷五月综合| 精品国产91洋老外米糕| av免费在线一区| www.av中文字幕| 亚洲人被黑人高潮完整版| 男人天堂亚洲二区| 91在线看网站|