Dot-Net

DI Control-Freak 反模式:難以理解

  • July 17, 2012

我正在閱讀 Mark Seemann 的 .NET 中的 Dependency Injection,但我一生都無法理解這一點:

儘管new關鍵字在涉及 VOLATILE DEPENDENCIES 時是一種程式碼異味,但您不必擔心將其用於 STABLE DEPENDENCIES。new關鍵字通常不會突然“非法”,但您應該避免使用它來獲取 VOLATILE DEPENDENCIES 的實例。

也許是因為我仍然無法理解環境上下文是一個注入而不僅僅是一個全域變數,但我只是不明白作者在說什麼。

我真的很想從上到下理解 DI,但現在我被卡住了,這只是本書的 1/3 …… Control-Freak 反模式似乎是每個曾經生活過的程序員…

有人有任何見解嗎?

波動率(對我來說)是衡量一個班級需要改變的可能性。

理想情況下,您將類設計為對擴展開放但對修改關閉(開放封閉原則)。這並不總是可能的。那些你接近改變的類比其他類更不穩定。

NDepend(一個 .Net 靜態分析度量工具)有一個稱為Instability的度量,在我看來它是同義詞。他們將其定義為:

不穩定性 (I):傳出耦合 (Ce) 與總耦合的比率。I = Ce / (Ce + Ca)。該指標是裝配體對變化的彈性的指標。該度量的範圍是 0 到 1,I=0 表示完全穩定的裝配,I=1 表示完全不穩定的裝配。

您不希望穩定類依賴於不太穩定的類。

至於決定注入與否,​​這聽起來更像是一個階級角色問題。從領域驅動設計來看,(DDD)類通常是實體(它們具有身份)、服務(它們編排事物)或值(它們是不可變的和可比較的,如 RED 或 100ml)。

你會注入服務,你會呼叫新的值。實體通常來自儲存庫(您注入的),但在內部儲存庫會在它們上呼叫 new。這有幫助嗎?

引用自:https://stackoverflow.com/questions/11330877