沒有任何軟件系統可以擺脫依賴關系,或者保證即使依賴組件發生變化也不會產生任何影響。軟件架構師總是要處理相互連接的組件之間的依賴程度,并盡量減少甚至消除這種影響。如果軟件組件 A 在如下情況下需要軟件組件 B,那么軟件組件 A 就依賴于軟件組件 B:
耦合是任意架構構件之間的依賴程度。
在不同抽象層次上,存在著不同類型的耦合。耦合不僅發生在源代碼層面,還發生在基礎架構以及其他方面。軟件架構師需要了解這些類型,以便在設計這些組件時做出正確決定。我們將根據 ISAQB 軟件架構認證課程來了解這些耦合類型。
這種耦合是經典耦合之一。基本上,如果類 A 調用類 B 的公有變量,它們就會通過使用/委托耦合在一起。最好的解決方法是將這些公有變量私有化,并通過 getter 調用它們。
在組合關系中,正如面向對象編程中所定義的,類 A 包含類 B。在某些情況下,類 B 可以是類 A 的內部部分,并不獨立存在。因此,這些類通過組合關系耦合在一起。
這類耦合出現在工廠、抽象工廠等構建設計模式中。在這些設計模式中,類 A 或 B 的構建被委托給工廠類。也就是說,類 A 或 B 是通過構建與工廠類耦合的。
子類繼承超類的屬性和方法的一種依賴關系。通過繼承產生的耦合非常嚴格,因為父類做什么,子類就做什么。
消息傳遞中間件和事件存儲廣泛用于組件之間的松散耦合。在消息傳遞中,通信是異步的,發送方的請求被發送到消息隊列中,接收方從隊列中獲取請求。發送方可能知道也可能不知道哪個接收方收到了請求,也不會立即回復。在事件處理中,想法與消息傳遞類似,但這里的狀態變化是按時間順序傳遞給監聽者的。由于這種通信也是異步的,耦合非常松散,因此非常受歡迎。
在這種耦合中,如果 A 組件在 B 組件提供某些輸出之前無法執行其工作,那么 A 組件就會暫時依賴于 B 組件。在這種耦合中,組件 A 和組件 B 不需要使用相同的編程語言或基礎設施。例如,要在電商網站中購買一些商品,首先需要選擇并將商品添加到購物車中。
根據業務需要,開發者會創建一些自定義數據類型以供進一步使用。例如,在 JPA 中創建的 UserEntity 與數據庫中的 User 表相對應。因此,UserEntity 將成為軟件系統中的核心數據類型,在任何需要處理用戶數據的地方都可以使用。如果 UserEntity 有微小的變化,所有依賴類都會受到影響。這就是通過數據類型實現的耦合。
當組件 A 在數據庫、配置文件或環境變量中持久化保存信息,而組件 B 也與之通信時,就會出現數據耦合。如果一個組件的變化通過這些耦合數據影響到另一個組件,那么很可能需要松開這些耦合。
設想有一個物理硬件或服務器,組件 A 在內存位置寫入了一些內容,組件 B 在讀取這些內容時也會受到影響。這種耦合是通過硬件實現的,經常發生在底層編程中。
本文鏈接:http://www.tebozhan.com/showinfo-26-99900-0.html軟件架構中的九種耦合形式
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com