Django接收器最佳实践

时间:2013-12-27 16:15:30

标签: python django optimization signals

我决定如何编写接收器。我可以做以下任何一种情况:

  1. 在一个接收器中抛出一个信号
  2. 将一个信号的多个接收器分开 组织目的
  3. 我的问题是:它会有所作为吗?如果是这样,为什么?

    选项1:

    @receiver(some_signal)
    def do_it_all(sender, **kwargs):
        # do something for table 1
        # do something for table 2
        # do something for table 3
        #...
    

    选项2:

    @receiver(some_signal)
    def do_it_for_one(sender, **kwargs):
        # do something for table 1
    @receiver(some_signal)
    def do_it_for_two(sender, **kwargs):
        # do something for table 2
    @receiver(some_signal)
    def do_it_for_three(sender, **kwargs):
        # do something for table 3
    #...
    

    选项1显然更强 DRY ,但选项2允许更多组织和可读性,因此他们都有适合他们的事情。但真正的问题是,真的重要吗?

1 个答案:

答案 0 :(得分:1)

最后他们都会工作。但是,随着时间的推移,您可能会发现do_it_all变得非常大,无论如何您最终会将其分成多个函数:

@receiver(some_signal)
def do_it_all(sender, **kwargs):
    do_something_for_table_one(sender, **kwargs)
    do_something_for_table_two(sender, **kwargs)
    do_something_for_table_three(sender, **kwargs)

在这种情况下,它与选项二没有什么不同。

所以我认为第二种方法最终导致代码更清晰。这也意味着你可以单独测试每个接收器。