Это может быть немного длинный вопрос, но я стараюсь сделать его как можно меньше и постараюсь изложить его как можно лучше.
Я читал о шаблонах проектирования и нашел шаблон наблюдателя очень интересным. я искал его практическое применение и нашел различные ответы здесь. один из этих ответов был:
Каждый раз, когда публикуется вопрос, уведомляются все подписчики, которые следят за темами, представляющими аналогичный интерес.
Я попытался смоделировать эту систему на Python, как показано ниже:
используя Mongoengine ORM для моделирования пользователя и определения функции notify для класса User, который можно использовать для уведомления пользователя:
from mongoengine import *
connect('tumblelog')
# User model
class User(Document):
email = StringField()
first_name = StringField()
last_name = StringField()
topic_subscribed = StringField()
def notify(self):
print "email sent to user :{} {} {}".format(self.first_name, self.last_name, self.email)
print "user was subsacribed to: {}".format(self.topic_subscribed)
# simulate publishing of an article of a particular topic
while True:
x = raw_input(">>>")
print "question of {} topic published".format(x)
# How to notify all users that are subscribed to the topic ?????
# naive way :
# def some_aynchronous_function():
# 1) find all users from db that are subscribed to the topic
# 2) notify each user by looping through all of them
Я знаю тривиальный способ сделать это, но могу ли я сделать что-то лучше, используя здесь шаблон наблюдателя?
ПРИМЕЧАНИЕ. Я не пытаюсь приспособить проблему к шаблону проектирования, поскольку это обычно не одобряется. Я просто пытаюсь реализовать его в * учебных целях. Я пробовал искать некоторые реализации, но пока безуспешно
МОЙ ВОПРОС: я представил свой способ решения проблемы (псевдокод выше), но есть ли что-нибудь, что можно сделать лучше, используя здесь шаблон наблюдателя?