2013-07-05 34 views
1

有一天,我正在編碼,突然間我發現自己正在努力解決一個簡單的問題,但混淆解決方案(至少在pythonic的方式去)。在Python中使用空模式的推薦方式是?

的代碼應該只下載一些文件,對於這一點,它會調用一些DownloadController傳遞一個callback所以接收到的事件,如initprogresserrorsuccess

但是,我的代碼並不需要所有這些事件。有了這個,我便想起了一些解決方案

  • 變化DownloadController有一個默認callback=None並檢查它,忽略在這種情況下
  • NullCallbackImpl粘附回調接口發送事件,但什麼都不做(只是pass上每個事件)

第一種方法不喜歡它,因爲代碼會有點混亂,而不是很好的設計。

所以,我堅持使用第二種方法......問題:

  • 有多好(也許「有多壞」)會是有一個null_callback = mock.Mock()? (使用Michael Foord的python模擬庫)
    • 是否有任何庫可以做到這一點?
  • 或者我應該堅持創建一個NullCallbackImpl實施每種方法與一個簡單的pass
+0

嘲笑記錄每個電話。你不希望每個事件都產生一堆垃圾日誌。 – user2357112

+0

這是一個很好的觀點。事實上,我需要避免這樣做的唯一理由。謝謝! –

回答

1

您發現了DownloadController的新用例 - 「讓用戶自定義回調」。這聽起來像你可以控制Downloadcontroller的源代碼。它可以定義一個DownloadCallback類,將事件公開爲方法,但對它們沒有任何影響。 Controller將接受None(無所事事)或任何實現DownloadController接口的內容。

我認爲對真實代碼使用模擬有點奇怪......它創建了另一個需要符合模塊用戶的依賴關係。

+0

在這種情況下,第一句似乎很正確。 「用戶」可以根據需要處理回調(使用UI顯示進度等) 我現在堅持使用所提議的解決方案,但是,我想找到某種方法只是將「null_object 「爲我處理所有事情......在任何情況下......無論哪個界面...... –

相關問題