99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

架構(gòu)設(shè)計(jì):為什么說(shuō)復(fù)用是邪惡的?

jf_ro2CN3Fa ? 來(lái)源:芋道源碼 ? 作者:芋道源碼 ? 2022-12-02 14:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

為什么我們喜歡復(fù)用呢?

認(rèn)為復(fù)用可以提高效率的推理邏輯是怎樣的?

你說(shuō)復(fù)用帶來(lái)了這么多問(wèn)題,那我們平時(shí)使用各種框架,基礎(chǔ)算法庫(kù)都要自己寫一份嗎?

那我設(shè)計(jì)系統(tǒng)時(shí),盡量將我的設(shè)計(jì)通用化就好了(例如拆很多個(gè) CRUD 的微服務(wù)),這樣就能更多的進(jìn)行復(fù)用,提高生產(chǎn)效率對(duì)嗎?

那系統(tǒng)設(shè)計(jì)好的標(biāo)準(zhǔn)是什么?衡量的維度有優(yōu)先級(jí)嗎?

總結(jié)

在系統(tǒng)設(shè)計(jì)和寫代碼的過(guò)程中,我經(jīng)常會(huì)聽(tīng)到「復(fù)用」這個(gè)詞,以「復(fù)用」為目的來(lái)設(shè)計(jì)技術(shù),業(yè)務(wù),組織架構(gòu)。例如:

抽象出一個(gè)類,函數(shù),UI 組件,用于不同的場(chǎng)景

抽象出一個(gè)微服務(wù),越細(xì)越好,這樣可以靈活的組合

抽象出一個(gè)業(yè)務(wù)中臺(tái),沉淀各種基礎(chǔ)業(yè)務(wù)功能,供全公司使用

組織(管理)架構(gòu)中,抽象出一個(gè)職能豎井(后端,前端,QA,財(cái)務(wù)),被不同的產(chǎn)品使用

產(chǎn)品設(shè)計(jì)中要完成一個(gè)性能功能,發(fā)現(xiàn)跟之前一個(gè)功能相似,就復(fù)用之前的功能設(shè)計(jì),改改繼續(xù)用

為什么我們喜歡復(fù)用呢?

主要目的:既然一部分功能已經(jīng)存在,為什么還要自己造呢?直接拿來(lái)用,這樣我可以做得更少,所以能夠提升個(gè)人的生產(chǎn)效率。

接受的教育:一直以來(lái)的教育,大部分工程師都學(xué)習(xí)過(guò) DRY principle;《設(shè)計(jì)模式》的的英文書名就是 《可復(fù)用面向?qū)ο筌浖幕A(chǔ)》,都在強(qiáng)調(diào)復(fù)用。

編程習(xí)慣:在面向?qū)ο笳Z(yǔ)言里,工程師習(xí)慣了繼承,而繼承對(duì)于大部分人來(lái)說(shuō)的目的就是復(fù)用

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

認(rèn)為復(fù)用可以提高效率的推理邏輯是怎樣的?

如果我們要寫一個(gè)系統(tǒng)的所有代碼,我們需要寫大量的代碼。

如果我們能從其他地方重用一些以前寫過(guò)的代碼,我們就能寫更少的代碼。

我們能重用的代碼越多,我們寫的代碼就越少。

我們寫的代碼越少,我們就會(huì)越早完成系統(tǒng)!

這樣的推理邏輯是存在如下誤區(qū):

所有的代碼(功能)需要相同的時(shí)間來(lái)寫

寫代碼是完成系統(tǒng)的最主要工作

如果你要寫得代碼依賴很多其他的「復(fù)用」模塊,你就要去理解不同的「復(fù)用」模塊提供的接口,很多時(shí)候只看文檔都不行;如果「復(fù)用模塊」的接口不是正好是適用你的場(chǎng)景,你就必須在講究使用接口和對(duì)方排期之間進(jìn)行選擇。

此外對(duì)于如何抽象出一個(gè)公共業(yè)務(wù)模塊,大部分人都沒(méi)什么標(biāo)準(zhǔn),公共業(yè)務(wù)模塊的負(fù)責(zé)人成了業(yè)務(wù)的外包,效率更低。

另一點(diǎn)是任何維護(hù)生產(chǎn)環(huán)境系統(tǒng)的人都知道寫代碼只是整個(gè)工作中一小步,而且是確定性最高的一步,之后維護(hù)才是最占用時(shí)間的。我們需要不斷地進(jìn)行調(diào)試,部署,再調(diào)試,部署。一個(gè)用于很多依賴的模塊相對(duì)依賴少的模塊做這些工作的難度是高很多的。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

你說(shuō)復(fù)用帶來(lái)了這么多問(wèn)題,那我們平時(shí)使用各種框架,基礎(chǔ)算法庫(kù)都要自己寫一份嗎?

肯定不需要自己再寫一份,我們平時(shí)會(huì)使用各種編程語(yǔ)言(Java,Go),框架,庫(kù)。我們使用這些沒(méi)有任何問(wèn)題,因?yàn)檫@是共識(shí)和標(biāo)準(zhǔn),他們是足夠「通用,一般化」,并不是為了某個(gè)業(yè)務(wù)或者某個(gè)公司定制的。先有「共識(shí),標(biāo)準(zhǔn)」,再談復(fù)用,絕對(duì)不是隨意的拿過(guò)來(lái)用。

那我設(shè)計(jì)系統(tǒng)時(shí),盡量將我的設(shè)計(jì)通用化就好了(例如拆很多個(gè) CRUD 的微服務(wù)),這樣就能更多的進(jìn)行復(fù)用,提高生產(chǎn)效率對(duì)嗎?

復(fù)用不是系統(tǒng)要追求的目標(biāo)。很多人認(rèn)為更多模塊的「復(fù)用」,就可以做到像樂(lè)高一樣快速搭建系統(tǒng),但是很多復(fù)用并不是樂(lè)高,而是器官移植,不僅不能提高效率,要不斷面對(duì)各種各樣的排異反應(yīng),降低了速度和穩(wěn)定性。很多創(chuàng)業(yè)公司快速發(fā)展時(shí)系統(tǒng)腐化的主要問(wèn)題就出現(xiàn)在了強(qiáng)行復(fù)用上。強(qiáng)行復(fù)用的案例很常見(jiàn),例如:

上百個(gè)字段的數(shù)據(jù)表(例如訂單表,數(shù)據(jù)表),不清楚哪個(gè)字段在哪個(gè)場(chǎng)景下有效

根據(jù)名詞來(lái)設(shè)計(jì)系統(tǒng),出現(xiàn)業(yè)務(wù)中臺(tái),例如訂單中臺(tái),電商中臺(tái),各部門之間不斷地扯皮

出來(lái)無(wú)數(shù)個(gè)小的微服務(wù),然后搞個(gè)統(tǒng)一的業(yè)務(wù)編排調(diào)度層(所謂的 gateaway)來(lái)處理業(yè)務(wù),可能還抽象 DSL;上線十分復(fù)雜,需要發(fā)布 N 各模塊;調(diào)度模塊是系統(tǒng)大單點(diǎn),穩(wěn)定性迭代速度都是問(wèn)題

如果有一個(gè)好的設(shè)計(jì),我們需要謹(jǐn)記《Hints for Computer System Design》中的「Use a good idea again instead of generalizing it. A specialized implementation of the idea may be much more effective than a general one.」

那系統(tǒng)設(shè)計(jì)好的標(biāo)準(zhǔn)是什么?衡量的維度有優(yōu)先級(jí)嗎?

兩個(gè)評(píng)價(jià)標(biāo)準(zhǔn)自治性和一致性:

自治性:受其他模塊的影響程度,觀測(cè)模塊的接口是否穩(wěn)定??梢允褂肁utonomyMetrics[1] 進(jìn)行衡量

一致性:應(yīng)該使用一個(gè)模塊的地方使用一個(gè)模塊的程度,也可以衡量是否過(guò)早,過(guò)度抽象了??梢允褂?ConsistencyMetrics[2]

在業(yè)務(wù)層次是否要從多個(gè)業(yè)務(wù)模塊中抽象出一個(gè)底層模塊,可以通過(guò)多個(gè)業(yè)務(wù)模塊的這部分公共邏輯部分是否要一起進(jìn)行改變進(jìn)行判斷,如果不是需要一起變化的就不要抽象出公共模塊。

根據(jù)個(gè)人經(jīng)驗(yàn)如果你在要從各個(gè)業(yè)務(wù)模塊進(jìn)行抽象出一個(gè)模塊保持一致與保持在模塊保持自治之間猶豫時(shí),要毫不猶豫優(yōu)先選擇「自治」。

總結(jié)

大部分情況下系統(tǒng)的核心復(fù)雜度不會(huì)減少, 只是轉(zhuǎn)移;不會(huì)因?yàn)樗写a一個(gè)人寫,會(huì)比分成兩個(gè)人寫更快,分工是應(yīng)該且必須的。但是請(qǐng)注意的是:

不要為了復(fù)用隨意通用化,抽象化,復(fù)用不是目的。如果要通用化就拿ConsistencyMetrics[2] 來(lái)判斷是否是抽象合理的。

不要隨意復(fù)用其他的模塊,自治優(yōu)先,用 AutonomyMetrics[1] 衡量;如果要復(fù)用一定要確保共識(shí)和標(biāo)準(zhǔn)優(yōu)先,形不成共識(shí)和標(biāo)準(zhǔn)就不用復(fù)用。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2788

    瀏覽量

    50362
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4380

    瀏覽量

    64853
  • 架構(gòu)設(shè)計(jì)

    關(guān)注

    0

    文章

    33

    瀏覽量

    7111

原文標(biāo)題:架構(gòu)設(shè)計(jì):為什么說(shuō)復(fù)用是邪惡的?

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    同一水平的 RISC-V 架構(gòu)的 MCU,和 ARM 架構(gòu)的 MCU 相比,運(yùn)行速度如何?

    ARM 架構(gòu)與 RISC-V 架構(gòu)的 MCU 在同一性能水平下的運(yùn)行速度對(duì)比,需從架構(gòu)設(shè)計(jì)原點(diǎn)、指令集特性及實(shí)際測(cè)試數(shù)據(jù)展開(kāi)剖析。以 ARM Cortex-M33 這類 ARMv8M 架構(gòu)
    的頭像 發(fā)表于 07-02 10:29 ?638次閱讀
    同一水平的 RISC-V <b class='flag-5'>架構(gòu)</b>的 MCU,和 ARM <b class='flag-5'>架構(gòu)</b>的 MCU 相比,運(yùn)行速度如何?

    聚徽解碼——從嵌入式到模塊化:國(guó)內(nèi)工控平板的柔性技術(shù)架構(gòu)設(shè)計(jì)

    在工業(yè) 4.0 與智能制造蓬勃發(fā)展的浪潮下,國(guó)內(nèi)工控平板作為工業(yè)自動(dòng)化與智能化的關(guān)鍵設(shè)備,其技術(shù)架構(gòu)設(shè)計(jì)正經(jīng)歷著從嵌入式到模塊化的深刻變革。這一轉(zhuǎn)變旨在賦予工控平板更強(qiáng)的柔性,使其能夠更高效、靈活
    的頭像 發(fā)表于 06-13 16:24 ?158次閱讀

    光伏運(yùn)維管理系統(tǒng)架構(gòu)設(shè)計(jì)及其應(yīng)用分析

    開(kāi)展。 光伏運(yùn)維管理系統(tǒng)集成先進(jìn)的數(shù)據(jù)監(jiān)測(cè)、故障診斷、運(yùn)維任務(wù)管理等多種功能內(nèi)容,為光伏電站提供全面、高效、智能的運(yùn)維服務(wù)。其系統(tǒng)分層架構(gòu)設(shè)計(jì),覆蓋感知層、網(wǎng)絡(luò)層、平臺(tái)層和應(yīng)用層。感知層通過(guò)傳感器和攝像頭等設(shè)
    的頭像 發(fā)表于 06-10 11:34 ?212次閱讀
    光伏運(yùn)維管理系統(tǒng)<b class='flag-5'>架構(gòu)設(shè)</b>計(jì)及其應(yīng)用分析

    設(shè)備遠(yuǎn)程監(jiān)控與預(yù)測(cè)性維護(hù)系統(tǒng)架構(gòu)設(shè)計(jì)及應(yīng)用實(shí)踐

    本文探討了在工業(yè)4.0與數(shù)字化轉(zhuǎn)型背景下,設(shè)備管理系統(tǒng)從傳統(tǒng)人工巡檢向智能運(yùn)維的深刻變革。文章從技術(shù)架構(gòu)、實(shí)施路徑和典型應(yīng)用三個(gè)方面深入解析了設(shè)備遠(yuǎn)程監(jiān)控與預(yù)測(cè)性維護(hù)系統(tǒng)的實(shí)現(xiàn)方法。
    的頭像 發(fā)表于 04-15 10:16 ?284次閱讀
    設(shè)備遠(yuǎn)程監(jiān)控與預(yù)測(cè)性維護(hù)系統(tǒng)<b class='flag-5'>架構(gòu)設(shè)</b>計(jì)及應(yīng)用實(shí)踐

    芯片架構(gòu)設(shè)計(jì)的關(guān)鍵要素

    芯片架構(gòu)設(shè)計(jì)的目標(biāo)是達(dá)到功能、性能、功耗、面積(FPA)的平衡。好的芯片架構(gòu)能有效提升系統(tǒng)的整體性能,優(yōu)化功耗,并確保在成本和時(shí)間的限制下完成設(shè)計(jì)任務(wù)。
    的頭像 發(fā)表于 03-01 16:23 ?616次閱讀

    Altium-designer模塊復(fù)用詳細(xì)教程

    本文介紹兩種復(fù)用模塊模式:一種為復(fù)用成完全相同的模塊;另一種復(fù)用為沿 X 軸、或沿 Y 軸成鏡像的模塊?
    發(fā)表于 12-30 16:16 ?1次下載

    探討篇(三):代碼復(fù)用的智慧 - 提升架構(gòu)的效率與可維護(hù)性

    作者:京東物流 馮志文 前兩篇從服務(wù)粒度和服務(wù)內(nèi)的分層架構(gòu)角度探討,本文繼續(xù)從服務(wù)間代碼復(fù)用角度探討。 背景 在分布式架構(gòu)中,代碼復(fù)用是個(gè)難題。那么如何處理代碼功能共享的問(wèn)題呢?本文結(jié)
    的頭像 發(fā)表于 12-27 15:58 ?610次閱讀
    探討篇(三):代碼<b class='flag-5'>復(fù)用</b>的智慧 - 提升<b class='flag-5'>架構(gòu)</b>的效率與可維護(hù)性

    面向服務(wù)的整車EE架構(gòu)(SOA)設(shè)計(jì)開(kāi)發(fā)咨詢服務(wù)

    經(jīng)緯恒潤(rùn)多年來(lái)一直致力于為客戶提供先進(jìn)電子電氣架構(gòu)解決方案,近年來(lái),經(jīng)緯恒潤(rùn)在國(guó)內(nèi)率先開(kāi)展整車SOA架構(gòu)的技術(shù)研發(fā)和業(yè)務(wù)布局,參與多款SOA架構(gòu)下量產(chǎn)車型的研發(fā),積累了豐富的SOA架構(gòu)設(shè)
    的頭像 發(fā)表于 12-12 15:11 ?1023次閱讀
    面向服務(wù)的整車EE<b class='flag-5'>架構(gòu)</b>(SOA)設(shè)計(jì)開(kāi)發(fā)咨詢服務(wù)

    架構(gòu)性需求的基礎(chǔ)知識(shí)

    第一次接觸“架構(gòu)性需求”,大約在六年前,當(dāng)時(shí)一位大佬指導(dǎo)我們說(shuō),在前期產(chǎn)品規(guī)劃時(shí),最重要的就是找到“架構(gòu)性需求”。本人就一頭的問(wèn)號(hào),“架構(gòu)性需求”是什么?我沒(méi)有聽(tīng)錯(cuò)吧?當(dāng)時(shí)也沒(méi)怎么放在
    的頭像 發(fā)表于 11-15 11:01 ?621次閱讀
    <b class='flag-5'>架構(gòu)</b>性需求的基礎(chǔ)知識(shí)

    GPU服務(wù)器AI網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)

    眾所周知,在大型模型訓(xùn)練中,通常采用每臺(tái)服務(wù)器配備多個(gè)GPU的集群架構(gòu)。在上一篇文章《高性能GPU服務(wù)器AI網(wǎng)絡(luò)架構(gòu)(上篇)》中,我們對(duì)GPU網(wǎng)絡(luò)中的核心術(shù)語(yǔ)與概念進(jìn)行了詳盡介紹。本文將進(jìn)一步深入探討常見(jiàn)的GPU系統(tǒng)架構(gòu)
    的頭像 發(fā)表于 11-05 16:20 ?1233次閱讀
    GPU服務(wù)器AI網(wǎng)絡(luò)<b class='flag-5'>架構(gòu)設(shè)</b>計(jì)

    深入理解 Llama 3 的架構(gòu)設(shè)計(jì)

    在人工智能領(lǐng)域,對(duì)話系統(tǒng)的發(fā)展一直是研究的熱點(diǎn)之一。隨著技術(shù)的進(jìn)步,我們見(jiàn)證了從簡(jiǎn)單的基于規(guī)則的系統(tǒng)到復(fù)雜的基于機(jī)器學(xué)習(xí)的模型的轉(zhuǎn)變。Llama 3,作為一個(gè)假設(shè)的先進(jìn)對(duì)話系統(tǒng),其架構(gòu)設(shè)計(jì)融合了
    的頭像 發(fā)表于 10-27 14:41 ?1215次閱讀

    邊緣計(jì)算架構(gòu)設(shè)計(jì)最佳實(shí)踐

    邊緣計(jì)算架構(gòu)設(shè)計(jì)最佳實(shí)踐涉及多個(gè)方面,以下是一些關(guān)鍵要素和最佳實(shí)踐建議: 一、核心組件與架構(gòu)設(shè)計(jì) 邊緣設(shè)備與網(wǎng)關(guān) 邊緣設(shè)備 :包括各種嵌入式設(shè)備、傳感器、智能手機(jī)、智能攝像頭等,負(fù)責(zé)采集原始數(shù)據(jù)
    的頭像 發(fā)表于 10-24 14:17 ?1103次閱讀

    架構(gòu)與設(shè)計(jì) 常見(jiàn)微服務(wù)分層架構(gòu)的區(qū)別和落地實(shí)踐

    架構(gòu)風(fēng)格越傾向于清晰的職責(zé)定位,且讓領(lǐng)域模型成為架構(gòu)的核心。 基于這些架構(gòu)風(fēng)格,在軟件架構(gòu)設(shè)計(jì)過(guò)程中又有非常多的架構(gòu)分層模型。 傳統(tǒng)三層
    的頭像 發(fā)表于 10-22 15:34 ?654次閱讀
    <b class='flag-5'>架構(gòu)</b>與設(shè)計(jì) 常見(jiàn)微服務(wù)分層<b class='flag-5'>架構(gòu)</b>的區(qū)別和落地實(shí)踐

    密集波分復(fù)用和稀疏波分復(fù)用的區(qū)別

    密集波分復(fù)用(DWDM, Dense Wavelength Division Multiplexing)和稀疏波分復(fù)用(CWDM, Coarse Wavelength Division
    的頭像 發(fā)表于 08-09 11:18 ?1359次閱讀

    扁平電纜(FFC)為電氣架構(gòu)帶來(lái)新的發(fā)展空間

    車輛架構(gòu)正處在一個(gè)關(guān)鍵的轉(zhuǎn)型期。隨著電動(dòng)汽車的興起,面臨著一次架構(gòu)設(shè)計(jì)上的重大突破,這代表了重新思考電氣和電子架構(gòu)設(shè)計(jì)的絕佳機(jī)會(huì)。同時(shí),由于混合動(dòng)力和內(nèi)燃機(jī)車輛中仍存在大量現(xiàn)有內(nèi)容,這使得采用創(chuàng)新
    的頭像 發(fā)表于 07-18 08:27 ?2305次閱讀
    扁平電纜(FFC)為電氣<b class='flag-5'>架構(gòu)</b>帶來(lái)新的發(fā)展空間