mysql耦合_内聚与耦合
簡(jiǎn)單理解一下內(nèi)聚和耦合。
什么是模塊
模塊就是從邏輯上將系統(tǒng)分解為更細(xì)微的部分,分而治之。
復(fù)雜問題因?yàn)閺?fù)雜性的問題,比較難解決,但是可以將復(fù)雜問題拆解為若干簡(jiǎn)單問題,逐個(gè)擊破地解決這些簡(jiǎn)單問題,最后實(shí)現(xiàn)解決復(fù)雜問題的效果。
模塊的粒度劃分可大可小,可以是函數(shù),類或功能塊等等。
耦合主要描述的是模塊與模塊之間的關(guān)系,內(nèi)聚則主要描述的是單個(gè)模塊的內(nèi)部構(gòu)成。
什么是耦合
如果模塊之間存在依賴,則可能會(huì)導(dǎo)致一個(gè)模塊的改動(dòng)影響了另外的模塊的問題,甚至是相互影響。
兩個(gè)模塊之間的關(guān)系越緊密,耦合就越強(qiáng),模塊的獨(dú)立性就會(huì)越差。
比如一個(gè)模塊A直接操作了模塊B中數(shù)據(jù),則視為強(qiáng)耦合;若A只是通過數(shù)據(jù)與模塊B交互,則視為弱耦合。
獨(dú)立的模塊便于擴(kuò)展、維護(hù)和單元測(cè)試,如果模塊之間重重依賴的話,就會(huì)極大降低開發(fā)效率。
什么是內(nèi)聚
一個(gè)模塊應(yīng)當(dāng)盡可能獨(dú)立完成某個(gè)功能,模塊內(nèi)部的元素關(guān)聯(lián)性越強(qiáng),則內(nèi)聚越高,模塊單一性就越強(qiáng)。
如果有各種場(chǎng)景需要被引入到當(dāng)前模塊,代碼的質(zhì)量將變得非常脆弱,這種情況建議拆分為多個(gè)模塊。
低內(nèi)聚的模塊代碼,不管是維護(hù)、擴(kuò)展還是重構(gòu)都相當(dāng)麻煩。因?yàn)橐骖檭?nèi)部元素的關(guān)聯(lián)性,如果不理清楚的話可能會(huì)難以下手。
接口設(shè)計(jì)原則
好的接口應(yīng)當(dāng)滿足設(shè)計(jì)模式六大原則,很多的設(shè)計(jì)模式或框架都是基于高內(nèi)聚低耦合這個(gè)出發(fā)點(diǎn)的。
1.單一職責(zé)原則:一個(gè)類只負(fù)責(zé)一個(gè)功能領(lǐng)域中的相應(yīng)職責(zé)。
2.開閉原則:一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。
3.里氏代換原則:所有引用基類(父類)的地方必須能透明地使用其子類的對(duì)象。
4.依賴倒轉(zhuǎn)原則:抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)當(dāng)依賴于抽象。換言之,要針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。
5.接口隔離原則:使用多個(gè)專門的接口,而不使用單一的總接口。即客戶端不應(yīng)該依賴那些它不需要的接口。
6.迪米特法則: 一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少地與其他實(shí)體發(fā)生相互作用。例如外觀模式,對(duì)外暴露的是統(tǒng)一接口。
外觀模式
外觀模式是為系統(tǒng)中的多個(gè)子系統(tǒng)提供一致的對(duì)外調(diào)用,對(duì)客戶端隱藏子系統(tǒng)細(xì)節(jié),降低其與子系統(tǒng)的耦合。
橋接模式
JDBC中的把面向廠商的接口(Driver)和面向使用者的API(DriverManager)做了拆分隔離。
//開發(fā)者只需要關(guān)注JDBC API, 無需關(guān)注不同數(shù)據(jù)庫(kù)Driver接口實(shí)現(xiàn)
Class.forName("com.mysql.jdbc.Driver");
Connection conn= DriverManager.getConnection(url, username, password);
這樣,開發(fā)者只需要指定數(shù)據(jù)庫(kù)的驅(qū)動(dòng)類,調(diào)用的方法即API都是相同的,不會(huì)因?yàn)閿?shù)據(jù)庫(kù)的不同而有所區(qū)別。
適配器模式
如果引入了第三方庫(kù)(Hibernate,Log4j),不應(yīng)該直接在代碼中繼承或者使用其實(shí)體類。
應(yīng)該要抽出上層統(tǒng)一接口,然后增加實(shí)現(xiàn)類,最后對(duì)外暴露接口。
//代碼與log4j強(qiáng)耦合, 不推薦
org.apache.log4j.Logger.getRootLogger().info("yanggb");//底層可以隨意更換log框架
FRLoggerFactory.getLogger().info("yanggb");
這樣,如果要更換log框架,只需要修改FRLoggerFactory中對(duì)log框架的引用就可以了,不需要在每個(gè)業(yè)務(wù)代碼中修改。
"我曾對(duì)你心動(dòng)過,但趕路要緊,我忘了說。"
總結(jié)
以上是生活随笔為你收集整理的mysql耦合_内聚与耦合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql嵌套选择代码_关于mysql:
- 下一篇: c# php加解密,PHP和C#可共用的