我有一個小問題。對於無損架構,我使用依賴注入。 如何在我的其他類之間共享此依賴關係解析器?這個解析器應該是一個帶有一些實例的全局靜態列表的靜態類,或者我應該這樣做非靜態的,並將此解析器通過屬性或構造函數傳遞給其他類?我認爲,你應該做這個非靜態的,因爲如果你用一個單獨的靜態解析器來做這件事,那麼你對這個解析器有依賴性。如何使用依賴解析器?
回答
你可以有兩種類型的解析器。
一個地方你的依賴被使用的構造像解決:
MyClass myClass; public MyConstructor(MyClass myClass) { this.myClass = myClass; }
或者另一種方法是使用setter方法就像使用setter注入:
public void setMyClass(MyClass myClas) { this.myClass = myClass; }
有其他設計模式(如工廠或單件)使用靜態方法並基於它們生成的輸入參數不同的對象,你可以使用,但它完全不同於DI,可以幫助DI。
在你的例子中myClass是依賴解析器的權利? – 2015-02-09 16:23:57
其實際依賴你的班級。你的課不應該專注於如何獲得我的依賴,而應該專注於業務邏輯。 – SMA 2015-02-09 16:30:04
@Macel,no。 myClass不是依賴解析器,它是一個依賴項。 – 2015-02-09 16:41:58
很多已經說和寫這一點,但普遍的共識是,有一個全球性的「分解」(又名Service Locator pattern)是anti-pattern:
與服務定位器的問題是,它隱藏一個類' 依賴關係,導致運行時錯誤,而不是編譯時錯誤, ,以及使代碼更難以維護,因爲它會變得不清楚,當你將引入一個突破性的變化。
而不是使用這個全局解析器,你應該使用oposite模式:依賴注入(DI)。使用DI,您可以將依賴關係注入到類中,而不是讓類通過某個解析器請求依賴關係。最常見的 - 通常最好的方法是使用構造函數注入。這意味着某些類的構造函數在類sole constructor中定義了它作爲構造函數參數所需的依賴關係。
類的構造函數應該只包含這個類直接使用的依賴項。類依賴關係所需的依賴關係不應暴露給該類,因爲這隻會不必要地增加代碼的耦合性,並使代碼難以測試,難以推理。
這樣的結果是,應用程序中的非類將負責構建和請求它們的依賴關係。每個類將這個責任推到調用鏈上,導致在應用程序中有一個位置,靠近應用程序的啓動路徑,負責構建所有對象圖:composition root。
構圖根是您可以使用這樣的解析器的地方,但這是可選的。
- 1. 簡單依賴解析器
- 2. 如何在Python中使用stanford依賴關係解析器
- 3. 如何使用Stanford NLP解析器獲得依賴關係樹
- 4. 常春藤依賴解析器是否與Maven依賴解析器相同?
- 5. 使用Scala/SBT解析器組合器重複依賴解析器
- 6. 如何讓maven解析本地依賴的傳遞依賴項
- 7. SBT不使用基於SSH的解析器來解決依賴
- 8. 如何創建依賴性解析
- 9. 如何解決Stanford Charniak解析器依賴項
- 10. 斯坦福解析器:如何打印解析樹和通用依賴關係?
- 11. 西班牙語的依賴解析器?
- 12. asp.net web api依賴解析器與ninject:BeginScope
- 13. 斯坦福解析器 - 類型依賴
- 14. 解析器規則依賴於參數
- 15. Gemspec解析依賴關係
- 16. 無法解析的依賴
- 17. 依賴項解析異常
- 18. 無法解析依賴
- 19. Maven依賴關係解析
- 20. Unity.ResolutionFailedException - 依賴解析失敗
- 21. 與參數解析依賴
- 22. Gradle依賴關係解析
- 23. Spring依賴關係解析
- 24. 如何告訴Grails使用Gradle進行依賴關係解析
- 25. Maven3 - 如何找到依賴關係解析? (mvn依賴:樹不適用於mvn3)
- 26. 使用NLTK和MaltParser的依賴關係解析器
- 27. 使用UnityContainer作爲SignalR依賴關係解析器
- 28. 依賴注入使用X3的解析器
- 29. 使用Ninject的依賴關係解析器
- 30. 斯坦福依賴解析器 - 如何獲得跨度?
Sry,我是一個.Net開發者 – 2015-02-09 16:12:11
你可以給它加上標籤並記住總是標記嗎? – SMA 2015-02-09 16:12:52
不管哪種語言,DI ist的princibe總是相同的。我只想知道,其他班級應該如何訪問解析器。傳入構造函數或靜態解析器。 – 2015-02-09 16:14:14