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