2009-07-12 26 views
6

मैं वर्तमान में एक ऐसे एप्लिकेशन पर काम कर रहा हूं जो लोगों को ऑनलाइन रेडियो स्टेशन के लिए "शो" शेड्यूल करने की अनुमति देता है।दोहराव "घटनाक्रम" (कैलेंडर)

मैं एक दोहराया घटना सेटअप करने के लिए उपयोगकर्ता के लिए क्षमता चाहते हैं, उदाहरण के लिए कहते हैं: -

"उन्मत्त सोमवार" शो - 9-11 "मिड महीना पागलपन" से हर सोमवार - के प्रत्येक दूसरे गुरुवार महीना "इस महीने नया संगीत" - हर महीने में से पहला।

आपकी राय में, यह मॉडल करने का सबसे अच्छा तरीका है (एक एमवीसी/एमटीवी संरचना के आधार पर)।

नोट: मैं वास्तव में Django में इसे कोडिंग कर रहा हूं। लेकिन मैं विशिष्ट कार्यान्वयन विवरण के बजाय, इसके पीछे सिद्धांत में अधिक रुचि रखता हूं।

उत्तर

9

आह, दोहराए गए कार्यक्रम - समय क्षेत्र के साथ-साथ मेरे जीवन के प्रतिबंधों में से एक। कैलेंडिंग हार्ड है।

आप RFC2445 के संदर्भ में इसे मॉडल करना चाहते हैं। हालांकि, यह आपको वास्तव में कहीं अधिक लचीलापन और जटिलता प्रदान कर सकता है।

कुछ बातों पर विचार करने के लिए:

  • दी तारीखों को एक निश्चित समय की तुलना में किसी भी अधिक स्पष्टता की जरूरत है? यदि आपको समय के आधार पर दोहराने की ज़रूरत है, तो यह मुश्किल हो जाता है।
  • जैसे कि "हर महीने की 30" और क्या है कि लीप वर्ष के लिए इसका मतलब
  • पर विचार इस तरह के "01:30 हर दिन" के रूप में समय कोने मामलों तारीख कोने मामलों पर विचार - कभी कभी 01:30, दो बार हो सकता है और कभी कभी यह हो सकता है ऐसा नहीं होता है, डेलाइट सेविंग टाइम
  • क्या आपको समय-समय पर लोगों के साथ शेड्यूल साझा करने की आवश्यकता है? इससे जीवन को फिर से चलने वाला बनाता है
  • क्या आपको घटना होने की संख्या का प्रतिनिधित्व करने की आवश्यकता है, या अंतिम तिथि जिस पर यह होती है? (मूल रूप से "गणना" या "जब तक"।) आपको या तो आवश्यकता नहीं हो सकती है, या आपको एक या दोनों की आवश्यकता हो सकती है।

मुझे एहसास है कि यह एक निश्चित उत्तर से अधिक के बारे में सोचने के लिए चीजों की एक सूची है, लेकिन मुझे लगता है कि समाधान करने का प्रयास करने से पहले अपनी समस्या के मानकों को परिभाषित करना महत्वपूर्ण है।

+0

कुछ महान टिप्पणियां ... भले ही एक निश्चित उत्तर न हो। – Mez

0

मुझे एक विचार था कि एक नया मॉडल के साथ मूल घटना सहेजी जाने पर बार-बार घटनाएं उत्पन्न की जानी चाहिए। इसका मतलब है कि कैलेंडर हर बार लोड होने पर मैं यादृच्छिक प्रसंस्करण नहीं कर रहा हूं (और इसका मतलब है कि मैं भी एक श्रृंखला में "शो" रद्द कर सकता हूं) लेकिन इसका मतलब यह भी है कि मुझे इसे एक निश्चित समय सीमा तक सीमित करना है, इसलिए अगर कोई कहता है, भविष्य में एक वर्ष, वे इन दोहराए गए शो नहीं देख पाएंगे। लेकिन किसी बिंदु पर, उन्हें (संभावित रूप से) पुन: उत्पन्न करना होगा।

+1

आप आमतौर पर "अपवाद" ईवेंट का उपयोग करके पुनरावृत्ति में एक ईवेंट को रद्द/बदल देंगे। –

+0

हम्म .. इसके बारे में सोचा नहीं था! – Mez

1

अन्य पोस्ट पढ़ने से, मार्टिन फाउलर पुनरावर्ती घटनाओं का सबसे अच्छा वर्णन करता है। http://martinfowler.com/apsupp/recurring.pdf

किसी ने जावा के लिए इन कक्षाओं को लागू किया। http://www.google.com/codesearch#vHK4YG0XgAs/src/java/org/chronicj/DateRange.java

संबंधित मुद्दे