討論個有關模組化設計的問題

Sugar發表於2019-05-09

場景:

在 golang,現在的程式中有兩個模組,於是建立了 package A 和 package B。 由於業務邏輯的特殊性,B 中有一個子模組 C,C 中有一個子模組 D,D 模組的初始化/建構函式依賴於外部的 A 模組中的一個值。除此之外, B 包中的任何方法、屬性 都與 A 包無任何關聯。 B 模組的初始化過程中會初始化子模組 C,C 模組的初始化過程中會初始化子模組 D。

問題:

基於以上的情況

  • 該如何設計當前的模組結構才是最合適的呢?
  • 鑑於模組化 “高內聚低耦合” 的設計原則,A 和 B 兩個模組 除了 子模組 D 依賴 A 中的一個值這一點之外,沒有任何交集
  • 如果把 A 和 B 完全打通搞成同一個模組,違背了高內聚的原則,而目前的 A B 分開的模組結構,又存在業務邏輯上的這種特殊依賴,產生了讓人不太舒服的耦合度
  • 場景只是就事論事舉個例子,真實的業務場景中肯定不止 ABCD 這四個模組,B 中還會有很多其他的子模組,A 中亦然,所以大家沒必要糾結我的場景為什麼把四個模組要搞出這種奇怪的模組結構,我相信這樣的情景在很多業務場景中都存在。

補充:

我們暫且稱 D 所依賴的那個值為 x, x 需要依賴於 A 模組中某個方法的執行結果,也就是說 正常情況下任何程式模組想拿到 x 值,需要先例項化 A,然後呼叫 A.GetXValue() 方法獲取。 不僅如此,在 D 模組中,依賴 x 的方法可能是一個私有方法,也就是 golang 中小寫字母開頭的簽名方法。這樣一來,可能有好幾個方法會因為 x 這一個值的依賴被強迫強耦合起來。

更多原創文章乾貨分享,請關注公眾號
  • 討論個有關模組化設計的問題
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章