編程思想裡面,何謂解耦? | 知乎問答精選

 

A-A+

編程思想裡面,何謂解耦?

2019年04月23日 知乎問答精選 暫無評論 閱讀 10 ℃ 次

【vczh的回答(36票)】:

就是每個部分獨立變化。舉個簡單的例子,畫一個三角形和畫一個文字,在DX和OpenGL下面用的是截然不同的方法(不僅僅是函數名不一樣)。但是你哪一天你發現,你愛用DX還是OpenGL,絲毫不影響你如何畫三角形還是文字,愛畫什麼畫什麼,那麼你畫的東西跟你畫的手段就解耦了。這個解耦的方法就是在中間插入一層interface。

孔子曰,軟件的所有問題都可以通過增加一層interface來解決。你的團隊越大,需求變化越快,你越要保證程序員之間的依賴關係越少,你的軟件解耦的就越好,interface就越多,關係就越複雜(跟亂不一樣),應付變化就越容易,錢賺的就越多,越穩定。

【胡卿的回答(7票)】:

子系統、子模塊的職責劃分。把內在關聯密切的功能/實現放在一個模塊中,最小化暴露給外部的細節和依賴,是為「高內聚、低耦合」

舉UI Framework的例子。如果你用過WPF/Silverlight,就知道有個很神奇的功能——Data Binding。如果你做前端開發,用過AngularJS或者Backbone,也有類似binding的概念。

binding對MVC/MVVM的低耦合實現是很關鍵一環。Model和View是在運行時才關聯在一起,而非編譯時,大大降低了耦合性:

  • Model層只管準備純數據,不關心它如何呈現(是用list還是combo或者grid?)
  • View層只管顯示數據,不管它從何而來,如何產生(來自backend service還是本地mock)

相對應,高耦合的實現:

  • Model層用jquery訪問dom元素去set。相比binding而言,Model層依賴於不必要的頁面顯示細節
  • View層有大段大段的js代碼去生成或者獲取數據。加上業務邏輯和異常處理簡直就是一坨shit。因為是寫死的,所以不好mock數據,自動測試和美工設計都不好搞。

當然,真實的工程項目會更加複雜,尤其在加上data format/validation這樣的灰色地帶後。你需要考慮是放在Model還是View層,或者兩者都要。個人覺得Entity Framework + Asp.net Razor對data format/validation的解決方案相當簡潔優雅,職責分明。

【知乎用戶的回答(3票)】:

具體實現方法和邏輯部分分開的意思。即,高度解耦的代碼在修改時只需要處理對應的小模塊,不需要費心分離融合在一起的結構進行重寫。

【EnzoJiang的回答(2票)】:

解耦就是我不認識你,你不認識我。

【Rich的回答(0票)】:

在抽像類裡寫個純虛函數,然後在不同的類裡重寫此函數。以後用到這個函數的時候你就是在解耦了。

【知乎用戶的回答(0票)】:

面向接口進行開發

【junlee的回答(0票)】:

解耦就是你撥打10086就有人為你服務,具體是誰你不需要知道

【MinZhang的回答(0票)】:

解耦和就是:

開發時你寫code時可以隨便寫隨便改,不用擔心隔壁負責html css的某甲跳起來說你把他的頁面搞壞了

編譯時你的模塊不會因為某乙的模塊編譯fail一起也fail了

運行時某乙的模塊有問題,seg fault了,你的模塊還跑得很歡

標籤:-編程


相關資源:


標籤:



給我留言