2014-01-13 3 views
0

Сигналы - очень полезная часть Django, но мне сложно определить, когда они действительно необходимы. Возьмем следующий пример ambiguious:Django определяет, нужны ли сигналы

class FooBar(models.Model): 
    some_field = models.something(#...) 

    def func(self): 
     # do something 
     signals.some_signal.send(#...) 

так что это будет посылать сигнал всякий раз, когда метод func называется. Но можно также сделать следующее:

def func(self): 
    # do something 
    # do what was in the receiver function 

Существует ли какая-либо классификация, когда использовать сигнал, а когда просто включить его в исходном местоположении? Кажется, что большинство ситуаций будет работать в обоих направлениях ... сигналы являются более оптимальными? Подробное объяснение - это то, что я ищу. Заранее спасибо!

ответ

2

Идея сигналов или событий заключается в том, что некоторые источники генерируют их, а кто-то их потребляет , не зная друг о друге.

Так что, пока ваш пример работает технически, он создает жесткую зависимость между func() и функцией приемника. Если приемник уходит или изменяется, вам всегда нужно также проверить func().

С сигналами func() только что публикует сигнал. Тот, кто может быть заинтересован (и могут быть десятки получателей или нет), получает уведомление без каких-либо изменений до func().

Смежные вопросы