烧瓶信号:为什么不修改信号数据?

时间:2014-08-24 12:53:49

标签: python flask blinker

Flask文件说:

  

另请注意,信号旨在通知订阅者和   不应该鼓励订阅者修改数据

我在想,为什么会这样?

我正在使用Flask-User库,我想在用户注册时为用户设置一些默认字段(例如set displayname等于username),然后更新db。当用户注册时,Flask-User发送user_registered信号。为什么订阅信号并在其中更新数据库是个坏主意?

1 个答案:

答案 0 :(得分:3)

全面解决方案。我想我是强大的Drupal / PHP开发人员。直到第7版,所有内容都是使用钩子 - 信号(Flask)构建的。当一切都建立在钩子上时,项目变得一团糟。这是一个快速的过程,但很危险。信号被设计用作观察者模式,它喜欢事件。这是主要的想法。但是当我们能够更新上下文时,主题。它喜欢连锁责任。主要问题是链条。因此,如果一个项目失败,则其他人会收到错误的状态。这是主要问题。有时很难找到失败的罪魁祸首。因为我们有不同主题的不同信号,所以修改了共同范围。

您几乎可以在任何地方进行扩展,但不应更改数据。要向右扩展,您应该使用干净的OOP解决方案。

有时我们需要改变一些逻辑。所以我们需要定义一个我们需要改变的篮子。在Drupal 8中,我们使用依赖注入容器 - 服务。服务以分隔文件描述。所以我们能够改变关系和注射。

有一个有趣的图书馆 - https://pypi.python.org/pypi/Flask-Injector