2009-02-07 32 views
33

मैं एक नई वेबसाइट पर एसओ के समान बैज सुविधा को कार्यान्वित करने के बारे में सोच रहा हूं। बैज के मानदंडों को स्टोर करने का सबसे अच्छा तरीका क्या है?बैज मानदंडों को स्टोर करने का सबसे अच्छा तरीका?

दो विचारों:

  • सभी कोड
  • 'दूसरा प्रणाली' - बैज और उनके मानदंडों को परिभाषित करने के लिए एक मेटा वास्तुकला पैदा करते हैं। डेटाबेस में कुछ जानकारी स्टोर करें और बैज और उनके मानदंडों को समझने के लिए कोड पूछें।

क्या बेहतर तरीके हैं?

उत्तर

37

नियम।

आप सिस्टम में ईवेंट बनाते हैं, और इवेंट स्ट्रीम प्रोसेसर के भीतर नियमों का उपयोग करते हैं।

विशेष रूप से, कहें कि आपके पास बैज "10 पोस्ट किए गए" हैं। आप पोस्ट नहीं करते हैं "पोस्ट से गिनती (*) जहां उपयोगकर्ता = उपयोगकर्ता" प्रत्येक पोस्ट के लिए। इसके बजाय, आपके पास एक साधारण नियम है जो प्रत्येक पोस्ट को देखता है, और "गिनती" करता है, उपयोगकर्ता प्रोफ़ाइल में नियमों को संग्रहीत करता है।

इस तरह "10 पोस्ट किए गए" सस्ते "1,000,000" पोस्ट के रूप में सस्ते हैं।

यह सिस्टम को और अधिक एक्स्टेंसिबल बनाता है।

+9

यदि आप इस मार्ग पर जाते हैं, तो जब आप एक नया बैज जोड़ते हैं तो मामलों से सावधान रहें और विश्लेषण करने की आवश्यकता है कि मौजूदा उपयोगकर्ताओं को पहले से ही क्या अर्जित करना चाहिए था। –

+0

हां, पूरी तरह से सिस्टम का एक नकारात्मक हिस्सा है, लेकिन फिर भी यह अधिक लचीला और स्केलेबल है (आमतौर पर) नए बैज जोड़ना परीक्षण और उन्हें देने से बहुत कम होता है। –

+0

तो आप सड़क के नीचे बैज जोड़ने को कैसे संभालेंगे? मान लें कि मेरे पास "woot" बैज की तरह एक नया बैज है जो SO जोड़ा गया है। आप इसे कैसे निष्क्रिय कर देंगे? – Micah

18

मैं इस पर विल के साथ सहमत हूं।

पृष्ठों पर "ईवेंट" बनाएं ताकि प्रत्येक बार कोई घटना हो यानी। कोई उपयोगकर्ता एक पोस्ट हटा देता है, यह घटना के साथ ईवेंट मॉड्यूल से पूछताछ करेगा, कहें, EVENT_USER_DELETE_POST और फिर आप उस ईवेंट का चयन कर सकते हैं और इसके आधार पर एक क्वेरी बना सकते हैं। फिर आप तय कर सकते हैं कि बैज से सम्मानित किया गया है या नहीं।

यह दो तर्कों को अलग रखेगा और मॉड्यूलर डिज़ाइन बनाएगा। इस तरह से इसे लागू करना बहुत आसान होना चाहिए।

एकमात्र नकारात्मक पक्ष यह है कि यदि घटना "कब्जा नहीं" की गई थी तो उपयोगकर्ता ने बैज मानदंड अर्जित किया होगा लेकिन इसे अभी तक पुरस्कृत नहीं किया गया है। हालांकि, यह कभी नहीं होना चाहिए। एकमात्र स्थिति मैं सोच सकता हूं कि डेटाबेस मैन्युअल रूप से छेड़छाड़ की जाती है।

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