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)不再提示

圖解高內(nèi)聚與低耦合

馬哥Linux運(yùn)維 ? 來(lái)源:博客園-大道方圓 ? 2023-03-08 17:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

模塊

模塊就是從邏輯上將系統(tǒng)分解為更細(xì)微的部分, 分而治之, 復(fù)雜問題拆解為若干簡(jiǎn)單問題, 逐個(gè)解決.

耦合主要描述模塊之間的關(guān)系, 內(nèi)聚主要描述模塊內(nèi)部. 模塊的粒度可大可小, 可以是函數(shù), 類, 功能塊等等.

耦合

模塊之間存在依賴, 導(dǎo)致改動(dòng)可能會(huì)互相影響, 關(guān)系越緊密, 耦合越強(qiáng), 模塊獨(dú)立性越差.

比如模塊A直接操作了模塊B中數(shù)據(jù), 則視為強(qiáng)耦合, 若A只是通過數(shù)據(jù)與模塊B交互, 則視為弱耦合.

獨(dú)立的模塊便于擴(kuò)展, 維護(hù), 寫單元測(cè)試, 如果模塊之間重重依賴, 會(huì)極大降低開發(fā)效率.

1a42c608-a2f7-11ed-bfe3-dac502259ad0.gif

內(nèi)聚

模塊內(nèi)部的元素, 關(guān)聯(lián)性越強(qiáng), 則內(nèi)聚越高, 模塊單一性更強(qiáng). 一個(gè)模塊應(yīng)當(dāng)盡可能獨(dú)立完成某個(gè)功能,

如果有各種場(chǎng)景需要被引入到當(dāng)前模塊, 代碼質(zhì)量將變得非常脆弱, 這種情況建議拆分為多個(gè)模塊.

低內(nèi)聚的模塊代碼, 不管是維護(hù), 擴(kuò)展還是重構(gòu)都相當(dāng)麻煩, 難以下手.

1a580716-a2f7-11ed-bfe3-dac502259ad0.gif

接口設(shè)計(jì)原則

好的接口應(yīng)當(dāng)滿足設(shè)計(jì)模式六大原則, 很多設(shè)計(jì)模式, 框架都是基于高內(nèi)聚低耦合這個(gè)出發(fā)點(diǎn)的.

單一職責(zé)原則: 一個(gè)類只負(fù)責(zé)一個(gè)功能領(lǐng)域中的相應(yīng)職責(zé).

開閉原則: 一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉.

里氏代換原則: 所有引用基類(父類)的地方必須能透明地使用其子類的對(duì)象.

依賴倒轉(zhuǎn)原則: 抽象不應(yīng)該依賴于細(xì)節(jié), 細(xì)節(jié)應(yīng)當(dāng)依賴于抽象. 換言之, 要針對(duì)接口編程, 而不是針對(duì)實(shí)現(xiàn)編程.

接口隔離原則: 使用多個(gè)專門的接口, 而不使用單一的總接口, 即客戶端不應(yīng)該依賴那些它不需要的接口.

迪米特法則: 一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少地與其他實(shí)體發(fā)生相互作用, 例如外觀模式, 對(duì)外暴露統(tǒng)一接口.

舉幾個(gè)栗子

外觀模式

為系統(tǒng)中多個(gè)子系統(tǒng)提供一致的對(duì)外調(diào)用, 對(duì)客戶端隱藏子系統(tǒng)細(xì)節(jié), 降低其與子系統(tǒng)的耦合.

1a697604-a2f7-11ed-bfe3-dac502259ad0.png

橋接模式

JDBC中的把面向廠商的接口(Driver)和面向使用者的API(DriverManager)做了拆分隔離.

//開發(fā)者只需要關(guān)注JDBCAPI,無(wú)需關(guān)注不同數(shù)據(jù)庫(kù)Driver接口實(shí)現(xiàn)
Class.forName("com.mysql.jdbc.Driver");
Connectionconn=DriverManager.getConnection(url,username,password);

1adf5914-a2f7-11ed-bfe3-dac502259ad0.png

適配器模式

引入第三方庫(kù)(hibernate, log4j), 不應(yīng)該直接在代碼中繼承或者使用其實(shí)體類.

需要抽出上層統(tǒng)一接口, 然后增加實(shí)現(xiàn)類, 對(duì)外暴露接口.

//代碼與log4j強(qiáng)耦合,不推薦
org.apache.log4j.Logger.getRootLogger().info("info");
//底層可以隨意更換log框架
FRLoggerFactory.getLogger().info("info");

1b097ec4-a2f7-11ed-bfe3-dac502259ad0.png

審核編輯:湯梓紅

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

    關(guān)注

    7

    文章

    2788

    瀏覽量

    50343
  • 耦合
    +關(guān)注

    關(guān)注

    13

    文章

    595

    瀏覽量

    101662
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8997

    瀏覽量

    153699
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1609

    瀏覽量

    64004
  • 內(nèi)聚
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1367

原文標(biāo)題:圖解高內(nèi)聚與低耦合

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    cpost的使用及原理解析

    嵌入式編程的需求千變?nèi)f化,要做到系統(tǒng)穩(wěn)定,又要代碼可復(fù)用,就要做到內(nèi)耦合。
    發(fā)表于 08-08 11:01 ?1430次閱讀

    使用C語(yǔ)言實(shí)現(xiàn)內(nèi)耦合

    編程時(shí),我們講究的是內(nèi)耦合,在協(xié)同開發(fā)、代碼移植、維護(hù)等環(huán)節(jié)都起到很重要的作用。
    發(fā)表于 09-21 11:33 ?1270次閱讀

    如何實(shí)現(xiàn)代碼的內(nèi)、耦合

    大家在談到面向?qū)ο缶幊痰臅r(shí)候基本都是討論軟件的“內(nèi)耦合”的特點(diǎn),這6個(gè)字也是算是成為了大部分評(píng)判代碼質(zhì)量的一個(gè)標(biāo)準(zhǔn),所以很多小伙伴一
    發(fā)表于 10-13 08:57 ?1359次閱讀

    淺析模塊化編程思路

    好久沒更新播客了,最新想寫些自己的編程方面想法。也就是些自己的想法,不一定準(zhǔn)確,在這希望能和大家分享下。相信大家在大學(xué)的時(shí)候都學(xué)過程序遵循的標(biāo)準(zhǔn)是“內(nèi)
    發(fā)表于 12-20 06:52

    如何去實(shí)現(xiàn)模塊設(shè)計(jì)中的內(nèi)耦合

    內(nèi)耦合分別是什么意思?有何作用?如何去實(shí)現(xiàn)模塊設(shè)計(jì)中的
    發(fā)表于 02-25 07:05

    怎么把硬件操作和APP軟件耦合起來(lái)?

    你們寫嵌入式都是怎么把硬件操作和APP軟件耦合起來(lái)的,怎樣達(dá)到內(nèi)耦合的效果
    發(fā)表于 11-06 07:57

    基于最優(yōu)投影的半監(jiān)督類算法

    (semi-su-pervised spectral clustering based on the optimal projection,SSOP)。該算法從高內(nèi)耦合
    發(fā)表于 01-14 11:54 ?0次下載

    寬帶頻率范圍內(nèi)的定向和雙向耦合

    MCLI在無(wú)源元件方面的專業(yè)知識(shí)還擴(kuò)展到寬帶頻率范圍內(nèi)的定向和雙向耦合器,具有插入損耗、指向性和駐波比的特點(diǎn)。MCLI所有定向
    發(fā)表于 11-10 10:24 ?1255次閱讀

    C語(yǔ)言中的內(nèi)耦合講解

    編程時(shí),我們講究的是內(nèi)耦合,在協(xié)同開發(fā)、代碼移植、維護(hù)等環(huán)節(jié)都起到很重要的作用。 一、原理篇而
    的頭像 發(fā)表于 08-16 14:06 ?2529次閱讀

    C語(yǔ)言--“內(nèi),耦合”編程思想

    1、定義內(nèi)耦合,是軟件工程中的概念,是判斷設(shè)計(jì)好壞的標(biāo)準(zhǔn),主要是面向?qū)ο蟮脑O(shè)計(jì),主要是看類的內(nèi)聚性是否
    發(fā)表于 01-13 13:43 ?3次下載
    C語(yǔ)言--“<b class='flag-5'>高</b><b class='flag-5'>內(nèi)</b><b class='flag-5'>聚</b>,<b class='flag-5'>低</b><b class='flag-5'>耦合</b>”編程思想

    很強(qiáng)大!耦合內(nèi)的MCU實(shí)用軟件框架

    一個(gè)模塊內(nèi)部各個(gè)元素之間的聯(lián)系的緊密程度,如果各個(gè)元素(語(yǔ)句、程序段)之間的聯(lián)系程度越高,則內(nèi)聚性越高,也就是內(nèi)。
    發(fā)表于 02-08 15:56 ?3次下載
    很強(qiáng)大!<b class='flag-5'>低</b><b class='flag-5'>耦合</b><b class='flag-5'>高</b><b class='flag-5'>內(nèi)</b><b class='flag-5'>聚</b>的MCU實(shí)用軟件框架

    手把手帶小白做MODBUS通訊實(shí)驗(yàn)

    我們做程序庫(kù)封裝的基本要義是內(nèi)耦合, 而評(píng)價(jià)低耦合的終極體現(xiàn)則是使用實(shí)現(xiàn)過程的優(yōu)雅程度。
    的頭像 發(fā)表于 08-06 17:05 ?1950次閱讀
    手把手帶小白做MODBUS通訊實(shí)驗(yàn)

    電路耦合效應(yīng)分析 耦合好還是

    電路耦合效應(yīng)分析 耦合好還是好 電路耦合效應(yīng)是指兩個(gè)或更多電路之間存在的相互影響的現(xiàn)象。在電路中,一個(gè)信號(hào)的變化可能會(huì)引起另一個(gè)信號(hào)的
    的頭像 發(fā)表于 09-22 12:47 ?5556次閱讀

    編程如何做到內(nèi)耦合呢?

    耦合,是指模塊之間盡可能的使其獨(dú)立存在,模塊之間不產(chǎn)生聯(lián)系不可能,但模塊與模塊之間的接口應(yīng)該盡量少而簡(jiǎn)單。
    的頭像 發(fā)表于 12-06 09:20 ?1476次閱讀

    Java 枚舉與策略模式、函數(shù)式接口的結(jié)合:實(shí)現(xiàn)內(nèi)耦合的設(shè)計(jì)

    中,通常會(huì)使用枚舉來(lái)定義業(yè)務(wù)上的一組常量,那除了簡(jiǎn)單地定義常量之外,我們?nèi)绾卫妹杜e來(lái)實(shí)現(xiàn)內(nèi)耦合的設(shè)計(jì)呢?下面介紹下枚舉和策略模式、
    的頭像 發(fā)表于 11-21 14:06 ?630次閱讀