Я строю систему календаря с нуля (требование, так как я работаю с особым типом календаря наряду с григорианским), и мне нужна помощь с логикой.Я пишу приложение на Django и Python.
По сути, логические проблемы, с которыми я сталкиваюсь, это как сохранить как можно меньше объектов, насколько это разумно, без использования вкладок циклов ЦП.Я чувствую, что полиморфизм был бы решением этой проблемы, но я не совсем уверен, как выразить это здесь.
У меня есть два основных подмножества событий: повторяющиеся и одноразовые.
Повторяющиеся события будут иметь подписчиков, людей, которые будут уведомлены об их изменениях.Если, например, класс отменен или перемещен на другой адрес или время, люди, которые подписались, должны знать об этом.Некоторые события просто происходят каждый день до конца времени, не будут редактироваться и «просто произойдут».Проблема в том, что если у меня есть один объект, который хранит информацию о событии и его повторяющуюся политику, то отмена или изменение одного события в серии действительно испортит ситуацию, и мне придется как-то это учитывать, сохраняяподписчики знают об изменениях и держат серию в единую логическую группу.
Парадокс: генерирование уникальных объектов событий для каждого нормального события в серии до конца времени (если оно повторяется бесконечно) не имеет смысла, если они все собираются хранить одну и ту же информацию;однако, если какое-либо изменение произойдет с одним событием в серии, у меня почти будет , чтобы создать другой объект в базе данных для представления отмены.
Может кто-нибудь помочь мне с логикой здесь?Это действительно искажает мой разум, и я не могу больше думать прямо.Мне бы очень хотелось получить информацию о том, как решить эту проблему, поскольку повторение событий не совсем легкая логическая вещь (повторение через день или каждые M / W / F, или 1-е число каждого месяца, иликаждые 3 месяца, или один раз в год в эту дату, или один раз в неделю в эту дату, или один раз в месяц в эту дату, или в 9:00 по вторникам и в 11:00 по четвергам и т. д.)Как помочь понять лучший маршрут логики для повторения событий, а также.
Вот мысль о том, как это сделать:
class EventSeries(models.Model):
series_name = models.TextField()
series_description = models.TextField()
series_repeat_policy = models.IHaveNoIdeaInTheWorldOnHowToRepresentThisField()
series_default_time = models.TimeField()
series_start_date = models.DateField()
series_end_date = models.DateField()
location = models.ForeignKey('Location')
class EventSeriesAnomaly(models.Model):
event_series = models.ForeignKey('EventSeries', related_name="exceptions")
override_name = models.TextField()
override_description = models.TextField()
override_time = models.TimeField()
override_location = models.ForeignKey('Location')
event_date = models.DateField()
class EventSeriesCancellation(models.Model):
event_series = models.ForeignKey('EventSeries', related_name="cancellations")
event_date = models.TimeField()
cancellation_explanation = models.TextField()
Кажется, это имеет смысл, но, как уже говорилось выше, это разрушает мой мозг прямо сейчас, поэтому все кажетсядолжно сработать.(Еще одна проблема и вопрос: если кто-то хочет изменить все оставшиеся события в серии, что, черт возьми, я делаю!?!? Я полагаю, что я мог бы изменить 'series_default_time', а затем сгенерировать экземпляры аномалий для всех прошлых экземпляров, чтобы установить ихк первоначальному времени, но АХХХХХХ !!!)
Сводя его к трем простым конкретным вопросам, мы имеем:
- Как я могу провести серию повторяющихся событий, покаразрешить отмены и модификации отдельных событий и модификаций для остальной части серии в целом, сохраняя при этом как можно меньше объектов в базе данных, никогда не создавая объекты для отдельных событий заранее?
- Как я могу повторять события в высокой степени настраиваемым способом, не теряя рассудка, в том, что я могу позволить событиям повторяться числом способов , но опять же упростить задачу и сохранить как можно меньше объектоввозможно?
- Как я могу сделать все вышеперечисленное, учитывая переключение на каждую серию событийчтобы этого не случилось, если он выпадет в праздник ?