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

मेरे रेल ऐप को रेडिस से कैसे बात करनी चाहिए?

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

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

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

लेकिन अब आपका User मॉडल के पास उपयोगकर्ता का प्रतिनिधित्व करने, रेडिस से बात करने, और . की जिम्मेदारी है लीडरबोर्ड का प्रबंधन! यह बनाता हैUser समझने में कठिन और परीक्षण करने में कठिन, और जो आप चाहते हैं उसके विपरीत है।

इसके बजाय, आप Redis अनुरोधों को एक नई वस्तु में लपेट सकते हैं जो दर्शाता है कि आप Redis के लिए का उपयोग कर रहे हैं . उदाहरण के लिए, आप एक 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 . में रह सकते हैं , लेकिन अब आप अतिरिक्त तर्क के साथ अपने ActiveRecord मॉडल को दूषित नहीं कर रहे हैं। Leaderboard वर्ग रेडिस के साथ संचार का प्रबंधन करता है, इसलिएUser क्लास को अब इस बात की परवाह नहीं है कि लीडरबोर्ड कैसे लागू होते हैं। इससे परीक्षण करना भी आसान हो जाता है।

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

इसे आज़माएं

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

बस याद रखें:

<ब्लॉकक्वॉट>

कंप्यूटर विज्ञान में सभी समस्याओं को अप्रत्यक्ष रूप से दूसरे स्तर पर हल किया जा सकता है।

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

<ब्लॉकक्वॉट>

…अप्रत्यक्ष की बहुत अधिक परतों की समस्या को छोड़कर।

— केवलिन हेनी


  1. पीसी पर क्लब हाउस का उपयोग कैसे करें

    क्लबहाउस इंटरनेट पर नए और अधिक परिष्कृत सोशल मीडिया प्लेटफॉर्म में से एक है। ऑडियो चैट एप्लिकेशन केवल आमंत्रण के आधार पर काम करता है और उपयोगकर्ताओं को तर्कों और चर्चाओं में भाग लेने देता है। जबकि क्लबहाउस मोबाइल ऐप छोटी बैठकों के लिए अच्छा काम करता है, छोटे स्क्रीन के माध्यम से बड़े दर्शकों को प्रब

  1. विंडोज 10 पर किसी ऐप को म्यूट कैसे करें

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

  1. स्विफ्टयूआई में गेमकिट लीडरबोर्ड को कैसे कार्यान्वित करें?

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