【发布时间】:2011-06-23 00:25:32
【问题描述】:
我有一个组件,它使用我编写的一个简单的发布/订阅模块作为消息队列。我想尝试其他实现,例如 RabbitMQ。但是,我想让这个后端更改可配置,这样我就可以在我的实现和 3rd 方模块之间切换以进行清洁和测试。
显而易见的答案似乎是:
- 读取配置文件
- 创建可修改的设置对象/字典
- 修改目标组件以延迟加载指定的实现。
类似:
# component.py
from test.queues import Queue
class Component:
def __init__(self, Queue=Queue):
self.queue = Queue()
def publish(self, message):
self.queue.publish(message)
# queues.py
import test.settings as settings
def Queue(*args, **kwargs):
klass = settings.get('queue')
return klass(*args, **kwargs)
不确定 init 是否应该采用 Queue 类,我认为它有助于轻松指定测试时使用的队列。
我的另一个想法是http://www.voidspace.org.uk/python/mock/patch.html,尽管它看起来会变得一团糟。好处是我不必修改代码来支持交换组件。
任何其他想法或轶事将不胜感激。
编辑:固定缩进。
【问题讨论】:
-
请修正代码的缩进。
标签: python architecture composition