我一直在閱讀Misko Hevery的Guide: Writing Testable Code。誰負責在無初始化依賴注入方案中附加偵聽器?
我絕對購買依賴注入作爲一個偉大的工具來提高可測試性,並在我的代碼中使用它。然而,當閱讀指南的第一部分「Flaw #1: Constructor does Real Work」時,我發現我對你如何連接事件監聽器仍然有點模糊。
比方說,我有一個類,爲了正常工作,需要將偵聽器附加到通過構造函數依賴注入傳入的參數之一。根據指南,構造函數應該只將它的參數賦值給成員變量,並且不要做其他工作。另外,當構造函數完成時,該對象應該完全初始化。然而,在這種情況下,我不認爲該對象被完全初始化,除非它需要監聽器被連接。
據我所知,這需要連接構建器或工廠中的所有偵聽器,儘管這看起來與對象本身非常脫鉤,並且容易失去同步。另外(至少在動作中,我花了大部分時間在這些日子裏),這意味着我的事件監聽器不再是私有的,因爲工廠/構建器需要看到它們。
處理這個問題的最佳方法是什麼?我在這裏錯過了另一個選項嗎?
監聽器對象的生命週期是什麼?他們活得比你的主要對象長嗎?如果它們比主對象的生命週期短,則不應通過構造函數傳遞它們。 – Runcible 2009-05-04 18:45:08