0

當我的構造函數是純粹的參數到propeties設置器,然後我不知道該把類需要正常工作的其他代碼放在哪裏。何時使用依賴注入時需要的初始化代碼?

例如在JavaScript中,我正在編程一個WindowMessageController,它在window對象上處理message事件。

爲了這個工作,我必須重視地方的處理程序:

var controller = this; 
this.applicableWindow.addEventListener("message", function(event) { 
    controller.messageAction(event.data); 
} 

哪裏這東西屬於正常?

    在構造函數中.initialize()方法
  1. - 引入時間耦合在WindowMessageControllerFactory.create(applicableWindow)
  2. - 這麼中心件的代碼相當遠的地方。這意味着即使是這樣一個小班也會分成兩部分。
  3. 在組合物根本身 - 做所有的時間
  4. 在其它的類WindowMessageRouter時,這會乘其大小將只有一個方法,構造,使用此代碼

編輯

這種情況似乎很特殊,因爲在應用程序中通常只有一個此類控制器的實例。然而,在更一般化的情況下,如果我創建了一個Button類的實例,那麼這個答案將會包含一些DOM <button />元素? Suddeny a

button = buttonFactory.create(domButtonEl); 

似乎更有用。

回答

1

我把這個代碼放到初始化(窗口)方法,但這種方法不能WindowMessageController的公共API的一部分 - 它必須是可見的,並通過直接用戶(這樣組成的根和測試)稱爲只要。 所以當DI容器返回WindowMessageController實例那麼它是容器的責任,初始化方法已被調用。

回覆編輯:是的,這家工廠似乎是我的最佳途徑。順便說一句。不要忘了,工廠應該可能有一個處置方法(即解除綁定在按鈕的情況下,事件處理程序)...

0

我認爲你需要創建一個路由器類,將負責用於事件發佈。這路由器應該訂閱所有的事件,並分配在控制器之間。它可以使用某種消息控制器映射,注入到構造函數中。

2
  1. 不要把任何真正的工作放到構造函數中。建設者很難嘲笑。請記住,接縫aka方法是可嘲弄的。構造函數不是可笑的,因爲繼承和嘲弄。

  2. 初始化是一個被禁止的詞,一般來說。

  3. 也許吧,但是你可以實現工廠作爲類的靜態方法也一樣,如果你是害怕許多類,)

  4. 成分根只是一個普通的工廠。除了它只有一個,因爲你的應用可能只有一個入口點),

  5. 通常,我們正在使用Javascript。如果你只需要一種工廠方法,爲什麼你需要上課呢?請記住,函數是第一類對象。

並用於編輯。除非他們不控制自己的生命週期,否則singetons沒有特別之處。黃金法則:始終(幾乎)在應用程序接線和應用程序邏輯之間進行分離。工廠正在佈線。只需佈線,無需邏輯,因此無需測試。

相關問題