Tôi đang xây dựng hệ thống lịch từ đầu (yêu cầu, vì tôi đang làm việc với một loại lịch đặc biệt cùng với Gregorian) và tôi cần trợ giúp về logic . Tôi đang viết ứng dụng trong Django và Python.Lặp lại "sự kiện" trong lịch: CPU và Cơ sở dữ liệu
Về cơ bản, các vấn đề logic mà tôi đang gặp phải là cách duy trì càng ít đối tượng càng tốt càng tốt càng tốt mà không cần chạy tab trên chu kỳ CPU. Tôi cảm thấy rằng đa hình sẽ là một giải pháp cho điều này, nhưng tôi không chắc chắn làm thế nào để thể hiện nó ở đây.
Tôi có hai tập hợp cơ bản của sự kiện, lặp lại sự kiện và sự kiện một lần.
Sự kiện lặp lại sẽ có người đăng ký, những người được thông báo về những thay đổi của họ. Ví dụ, nếu một lớp học bị hủy bỏ hoặc chuyển đến một địa chỉ hoặc thời gian khác, những người đã đăng ký cần phải biết về điều này. Một số sự kiện chỉ diễn ra hàng ngày cho đến cuối thời gian, sẽ không được chỉnh sửa và "chỉ xảy ra". Vấn đề là nếu tôi có một đối tượng lưu trữ thông tin sự kiện và chính sách lặp lại của nó, thì việc hủy hoặc sửa đổi một sự kiện trong chuỗi thực sự sẽ làm mọi thứ trở nên khó khăn hơn. thay đổi và giữ cho chuỗi thành một nhóm hợp lý.
Nghịch lý: tạo các đối tượng sự kiện duy nhất cho mỗi sự kiện bình thường trong chuỗi cho đến khi kết thúc thời gian (nếu lặp lại vô thời hạn) không có ý nghĩa nếu tất cả chúng đều lưu trữ cùng một thông tin; tuy nhiên, nếu có bất kỳ thay đổi nào xảy ra với một sự kiện trong chuỗi, tôi sẽ gần như có để tạo một đối tượng khác trong cơ sở dữ liệu để biểu thị hủy.
Ai đó có thể giúp tôi với logic ở đây không? Nó thực sự làm tôi suy nghĩ và tôi không thể nghĩ thẳng được nữa. Tôi thực sự thích một số đầu vào về cách giải quyết vấn đề này, vì các sự kiện lặp lại không chính xác là điều hợp lý dễ nhất (lặp lại mỗi ngày khác, hoặc mỗi M/W/F hoặc vào ngày m đầu tiên của mỗi tháng hoặc 3 tháng một lần, hoặc mỗi năm một lần vào ngày này, hoặc mỗi tuần một lần vào ngày này, hoặc mỗi tháng một lần vào ngày này, hoặc lúc 9:00 sáng vào các ngày thứ Ba và 11:00 sáng vào thứ Năm, vv) và tôi muốn giống như giúp hiểu đường logic tốt nhất cho các sự kiện lặp lại.
Dưới đây là một suy nghĩ về làm thế nào để làm điều đó:
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()
Điều này dường như làm cho một chút cảm giác, nhưng như đã nói ở trên, điều này được làm hỏng não của tôi ngay bây giờ để bất cứ điều gì có vẻ như nó sẽ làm việc. (Một vấn đề và câu hỏi khác, nếu ai đó muốn sửa đổi tất cả các sự kiện còn lại trong chuỗi, tôi phải làm gì!) Tôi cho rằng tôi có thể thay đổi 'series_default_time' và sau đó tạo ra các thể hiện bất thường cho tất cả các trường hợp trước đây để đặt chúng đến thời điểm ban đầu, nhưng AHHHHHH !!!)
sôi nó xuống đến ba, câu hỏi bê tông đơn giản, ta có:
- Làm thế nào tôi có thể có một loạt các sự kiện lặp đi lặp lại, chưa cho phép hủy bỏ và sửa đổi trên các sự kiện riêng lẻ và sửa đổi trên toàn bộ phần còn lại của chuỗi, trong khi lưu trữ ít đối tượng trong cơ sở dữ liệu là hoàn toàn cần thiết, không bao giờ tạo đối tượng cho các sự kiện riêng lẻ trong nâng cao?
- Làm cách nào tôi có thể lặp lại các sự kiện theo cách có thể tùy chỉnh cao mà không làm mất suy nghĩ, để tôi có thể cho phép sự kiện lặp lại trong number of ways, nhưng lại làm mọi thứ trở nên dễ dàng và lưu trữ càng ít đối tượng càng tốt?
- Làm cách nào tôi có thể thực hiện tất cả những điều trên, cho phép chuyển đổi trên mỗi chuỗi sự kiện để nó không xảy ra nếu nó rơi ra trên holiday?
+1 cho lớp hiếm thấy nhưng luôn hữu ích như vậy: models.IHaveNoIdeaInTheWorldOnHowToRepresentThisField – mjhm
Tôi sử dụng trường đó quá thường xuyên. –