Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रेल्स एप्लिकेशन्स को रेडिस से जोड़ना: कुशल डेटा एक्सेस के लिए सिद्ध पैटर्न

जब आप अपना रेल्स ऐप लिख रहे होते हैं, तो आप एक ऐसी समस्या में पड़ सकते हैं जिसे आप एक अलग डेटा स्टोर के साथ अधिक आसानी से हल कर सकते हैं। उदाहरण के लिए, आपके पास एक लीडरबोर्ड हो सकता है जो यूजर्स को आपकी साइट पर सवालों के जवाब देने के लिए मिले पॉइंट्स की संख्या के आधार पर रैंक करता है। रेडिस सॉर्टेड सेट्स के साथ, बहुत सारा कार्यान्वयन आपके लिए किया जाता है। बहुत बढ़िया! लेकिन आप रेडिस के साथ इंटरैक्ट करने वाले कोड को कहां रखते हैं?

आपका User मॉडल रेडिस से बात कर सकता है:

class User < ActiveRecord::Base
  def award_points(points)
    Redis.current.zincrby("leaderboard", points, id)
  end
end

लेकिन अब आपका User मॉडल एक यूजर को प्रतिनिधित्व करने, रेडिस से बात करने, और लीडरबोर्ड प्रबंधित करने की जिम्मेदारी रखता है! ये User को समझना और टेस्ट करना कठिन बना देता है, और ये वही है जो आप नहीं चाहते।

इसके बजाय, आप रेडिस अनुरोधों को एक नए ऑब्जेक्ट में लपेट सकते हैं जो इसका प्रतिनिधित्व करता है कि आप रेडिस का उपयोग किस लिए कर रहे हैं। उदाहरण के लिए, आप एक Leaderboard क्लास बना सकते हैं जो रेडिस कम्युनिकेशन को लपेटती है, नहीं ActiveRecord::Base से इनहेरिट करती, लेकिन फिर भी app/models डायरेक्टरी में रहती है। ये इस तरह दिखेगा:

app/models/leaderboard.rb
class Leaderboard
  def award_points_to_user(user_id, points)
    Redis.current.zincrby("leaderboard", points, user_id)
  end
end
app/models/user.rb
class User < ActiveRecord::Base
  def award_points(leaderboard, points)
    leaderboard.award_points_to_user(id, points)
  end
end

ये दोनों क्लासेज app/models में रह सकती हैं, लेकिन अब आप अपने एक्टिवरिकॉर्ड मॉडल्स को अतिरिक्त लॉजिक से दूषित नहीं कर रहे हैं। Leaderboard क्लास रेडिस के साथ कम्युनिकेशन का प्रबंधन करती है, इसलिए User क्लास को अब इस बात की परवाह नहीं करनी पड़ती कि लीडरबोर्ड कैसे कार्यान्वित किए जाते हैं। ये इसे टेस्ट करना भी आसान बनाता है।

नई जिम्मेदारियों के लिए नई क्लासेज बनाकर आप बहुत कुछ हासिल करते हैं, और app/models उन्हें रखने के लिए एक बेहतरीन जगह है। आपको अपनी फीचर के कार्यान्वयन के लिए किसी अन्य सर्विस पर निर्भर रहने के लाभ मिलते हैं, जबकि आपका कोड समझने, काम करने और टेस्ट करने में आसान रहता है।

इसे आज़माएं

क्या आप किसी नेटवर्क सर्विस कम्युनिकेशन के बारे में सोच सकते हैं जिसे सीधे आपके एक्टिवरिकॉर्ड मॉडल्स, कंट्रोलर्स, या व्यूज़ से कॉल किया जाता है? उस कोड को एक नॉन-एक्टिवरिकॉर्ड डेटा मॉडल में ले जाने की कोशिश करें, और देखें कि क्या आपका कोड समझने, काम करने और टेस्ट करने में आसान हो जाता है। फिर, मुझे ईमेल भेजें और मुझे बताएं कि ये कैसा रहा!

बस याद रखें:

कंप्यूटर साइंस की सभी समस्याओं को इंडिरेक्शन के एक और स्तर से हल किया जा सकता है।

— डेविड व्हीलर

...बहुत अधिक इंडिरेक्शन की समस्या को छोड़कर।

— केव्लिन हेनी

  1. पीसी पर Clubhouse का उपयोग करें - डेस्कटॉप एक्सेस के लिए स्टेप-बाय-स्टेप गाइड पीसी पर Clubhouse का उपयोग करें - डेस्कटॉप एक्सेस के लिए स्टेप-बाय-स्टेप गाइड

    पीसी पर Clubhouse का उपयोग कैसे करें (विंडोज और मैक) क्या मैं पीसी पर Clubhouse का उपयोग कर सकता हूं? फिलहाल, Clubhouse केवल एंड्रॉइड और iOS पर उपलब्ध है, लेकिन ऐप बड़ी स्क्रीन पर अपनी जगह बना रहा है। सोशल मीडिया प्लेटफॉर्म की पहले से ही एक ऑनलाइन वेबसाइट है जहां वे अपने नवीनतम अपडेट जारी करते हैं।

  1. विंडोज 10 में व्यक्तिगत ऐप्स को म्यूट करें: चरण-दर-चरण मार्गदर्शिका विंडोज 10 में व्यक्तिगत ऐप्स को म्यूट करें: चरण-दर-चरण मार्गदर्शिका

    आपके सभी ऑडियो डिवाइस और आपके द्वारा इंस्टॉल किए गए कई ऐप्स में विंडोज 10 में शानदार ऑडियो नियंत्रण है। क्या आप सोच रहे हैं कि विंडोज 10 पर ऐप्स को कैसे म्यूट करें? तो यह लेख आपकी मदद करेगा। आप अपने हेडफ़ोन के लिए एक अलग स्तर चुन सकते हैं, और विंडोज 10 स्वचालित रूप से उन्हें कनेक्ट करने पर इसे बदल द

  1. SwiftUI में GameCenter लीडरबोर्ड इंटीग्रेट करें: निर्बाध वैश्विक प्रतियोगिता के लिए SwiftUI में GameCenter लीडरबोर्ड इंटीग्रेट करें: निर्बाध वैश्विक प्रतियोगिता के लिए

    इस लेख में हम बात करेंगे कि अपने ऐप में GameCenter के लीडरबोर्ड को क्यों और कैसे लागू करें। GameCenter एक बड़ी वापसी क्यों कर रहा है आप स्कोरबोर्ड के बिना iPhone गेम बना सकते हैं, लेकिन लीडरबोर्ड गेम को अधिक प्रतिस्पर्धी महसूस कराने में मदद कर सकते हैं, जैसे दुनिया भर के लोग एक-दूसरे के खिलाफ प्रत