我决定如何编写接收器。我可以做以下任何一种情况:
我的问题是:它会有所作为吗?如果是这样,为什么?
@receiver(some_signal)
def do_it_all(sender, **kwargs):
# do something for table 1
# do something for table 2
# do something for table 3
#...
@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允许更多组织和可读性,因此他们都有适合他们的事情。但真正的问题是,真的重要吗?
答案 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)
在这种情况下,它与选项二没有什么不同。
所以我认为第二种方法最终导致代码更清晰。这也意味着你可以单独测试每个接收器。