在Python中使用Null模式的推荐方法是什么?

时间:2013-07-05 00:10:26

标签: python design-patterns mocking

前几天我正在编码,突然间我发现自己在解决一个简单的问题但却混淆了解决方案(至少以pythonic的方式去)。

代码应该只是下载一些文件,为此,它会调用一些DownloadController传递callback,以便接收initprogress等事件,errorsuccess

但是,我的代码在所有这些活动中并不需要。我想到了一些解决方案

  • DownloadController更改为默认callback=None并检查以便在此情况下忽略发送事件
  • NullCallbackImpl遵守回调界面但不执行任何操作(每个事件只需pass

第一种方法并不喜欢它,因为代码会有点乱,而且设计不好。

所以,我坚持第二种方法......问题:

  • 拥有null_callback = mock.Mock()会有多好(或许有多糟糕')? (使用来自Michael Foord的python模拟库)
    • 有没有图书馆这样做?
  • 或者我应该坚持使用简单的NullCallbackImpl创建实现每种方法的pass吗?

1 个答案:

答案 0 :(得分:1)

您发现了DownloadController的一个新用例 - “让用户自定义回调”。听起来您可以控制Downloadcontroller源。它可以定义一个DownloadCallback类,它将事件公开为方法,但不对它们执行任何操作。 Controller将接受None(什么都不做)或任何实现DownloadController接口的东西。

我认为使用模拟实际代码有点奇怪......它创建了另一个需要为模块用户满足的依赖。