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

रेल डिजाइन पैटर्न:प्रस्तुतकर्ता और सेवा वस्तुएं

हमें डिज़ाइन पैटर्न की आवश्यकता क्यों है?

समस्या यह है कि रेल आर्किटेक्चर, मॉडल-व्यू-कंट्रोलर, आपको अपना कोड डालने के लिए एक बुनियादी संरचना देता है।

लेकिन यह काफी नहीं है।

आपके विचार बड़े और तर्क से भरे होते हैं जब उनका लक्ष्य जानकारी प्रस्तुत करना होता है।

नियंत्रक के लिए आवश्यक कार्य करने के लिए जो आवश्यक है उससे परे आपके नियंत्रक विवरण रखते हैं।

समाधान क्या है?

इन समस्याओं को हल करने के लिए हमने डिज़ाइन पैटर्न के रूप में दो समाधान तैयार किए हैं।

  • प्रस्तुतकर्ता पैटर्न
  • सेवा ऑब्जेक्ट पैटर्न

हर कोई इस बात से सहमत नहीं है कि उन्हें वास्तव में कैसे लागू किया जाए, लेकिन मैं आपको वह संस्करण दूंगा जो मेरे लिए काम करता है।

आइए इन पैटर्न को एक्सप्लोर करें!

रेल में प्रस्तुतकर्ताओं का उपयोग कैसे करें

व्यूज प्रेजेंटेशन के लिए हैं, यानी एचटीएमएल, सीएसएस, और ईआरबी (एम्बेडेड रूबी)।

कोई ActiveRecord नहीं होना चाहिए विचारों में प्रश्न।

और अधिकांश तर्क को छोड़ देना चाहिए यदि आप चाहते हैं कि आपके विचार यथासंभव स्वच्छ और काम करने में आसान हों।

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

"तर्क" से मेरा मतलब है कि बयानों और टर्नरी ऑपरेटरों के साथ निर्णय लेना

अब सवाल है...

कैसे?

विचारों में तर्क को संभालने के लिए आपका पहला उपकरण सहायकों का उपयोग करना है।

जब भी आपके पास एक वैश्विक स्वरूपण पद्धति होती है जिसे आप कई दृश्यों में उपयोग करते हैं तो सहायक बहुत अच्छे होते हैं।

उदाहरण के लिए :

मार्कडाउन का प्रतिपादन, विशिष्ट प्रारूप में तिथियां दिखाना, टेक्स्ट से विशिष्ट शब्दों को हटाना आदि।

इसे पसंद करें :

module DateHelper
  def date_as_month_and_year(date)
    date.strftime("%B %Y")
  end
end

आप इस कोड को app/helpers . के अंतर्गत सहेज सकते हैं फ़ोल्डर और date_helper.rb फ़ाइल।

यहां एक युक्ति दी गई है :

हमेशा तर्कों के माध्यम से सहायक विधियों में इनपुट पास करें, कभी भी आवृत्ति चर पर भरोसा न करें।

यह आपको बहुत परेशानी से बचाएगा।

सहायक विधियों की सीमाएं हैं , खासकर यदि आप उनका उपयोग अपने विचारों में प्रत्येक स्वरूपण आवश्यकता के लिए करते हैं।

वे किसी भी प्रकार के संगठन का निर्माण और अभाव करते हैं।

समाधान आ रहा है!

प्रस्तुतकर्ता वस्तु के साथ जटिल सशर्त और स्वरूपण विधियों को बदलें

मान लें कि आपके पास ऐसा दृश्य है:

<p>
  Post title: <%= post.title.gsub("forbidden word", "") %>

  <%= link_to "Read post", post, class: "w-75 p-3 text-#{post.draft? ? "orange" : "green"} border-#{post.draft? ? "orange" : "green"}" %>
</p>

बहुत छोटा दृश्य, है ना?

लेकिन इन टर्नरी ऑपरेटरों और डुप्लीकेट कोड के साथ यह बहुत जटिल लगता है।

अच्छा नहीं!

आइए इसे हल करने के लिए एक प्रस्तुतकर्ता वर्ग बनाएं।

यहां बताया गया है :

class PostPresenter
  def initialize(post)
    @post = post
  end

  def title_without_forbidden_words
    @post.title.gsub("forbidden word", "")
  end

  def css_color
    @post.draft? ? "orange" : "green"
  end
end

इसे app/presenters/post_presenter.rb के अंतर्गत सहेजें , presenters बनाएं फ़ोल्डर अगर आपके पास नहीं है।

अब आप दृश्य बदल सकते हैं।

इसे पसंद करें :

<% presenter = PostPresenter.new(post) %>

<p>
  Post title: <%= presenter.title_without_forbidden_words %>

  <%= link_to "Read post", post, class: "w-75 p-3 text-#{presenter.css_color} border-#{presenter.css_color}" %>
</p>

वहाँ तुम जाओ!

  • हमने दृश्य से सभी तर्क हटा दिए हैं
  • हमने प्रारूपण और निर्णय लेने के कार्यों के लिए सार्थक नाम जोड़े हैं
  • कोड की नकल किए बिना हम इस वर्ग को अन्य दृश्यों में पुन:उपयोग कर सकते हैं

इस तरह आप रेल में प्रस्तुतकर्ताओं का उपयोग करते हैं 🙂

सेवा वस्तुओं का उपयोग कैसे करें

आपके नियंत्रकों को केवल दूसरों को बताना चाहिए कि उन्हें क्या करना है, उन्हें इस बारे में कोई जानकारी नहीं होनी चाहिए कि ट्वीट कैसे भेजें, ग्राहक से शुल्क कैसे लें या पीडीएफ फाइलें कैसे बनाएं।

ये संचालन प्रत्यायोजित किया जाना चाहिए सेवा वस्तु के लिए।

एक सेवा वस्तु, जैसा कि मैं इसे परिभाषित करता हूं, एक रूबी मॉड्यूल है जो एक क्रिया को पूरा करने के लिए तर्क को समाहित करता है।

उदाहरण :

module TwitterService
  def self.send_welcome_message(twitter_handle)
    client.update("@#{twitter_handle} welcome to 'Oranges & Apples', we hope you enjoy our juicy fruit!")
  end

  def self.client
    @client ||= Twitter::REST::Client.new do |config|
      config.consumer_key        = "..."
      config.consumer_secret     = "..."
      config.access_token        = "..."
      config.access_token_secret = "..."
    end
  end
end

कन्वेंशन इसे एक app/services . के तहत सहेजना है फ़ोल्डर, और एक फ़ाइल जैसे twitter_service.rb

आप इसका उपयोग कैसे करते हैं?

क्योंकि रेल app/ . से सब कुछ स्वतः लोड कर देता है , यह कोड आपके नियंत्रकों में उपलब्ध होगा।

उदाहरण :

class UsersController
  def create
    # ...
    TwitterService.send_welcome_message(user.twitter_handle)
  end
end

यह सेवा ऑब्जेक्ट पैटर्न कार्रवाई में है।

सारांश

आपने दो उपयोगी रेल पैटर्न सीखे हैं जो समझदारी से उपयोग किए जाने पर आपके प्रोजेक्ट की कोड गुणवत्ता को बेहतर बनाने में आपकी मदद करेंगे!

उन्हें लागू करने की अब आपकी बारी है 🙂

पढ़ने के लिए धन्यवाद।


  1. रेल के साथ हॉटवायर का उपयोग करना

    यदि आप बिना किसी जावास्क्रिप्ट कोड को लिखे पेज परिवर्तन और फॉर्म सबमिशन को तेज करने और जटिल पेजों को घटकों में विभाजित करने का तरीका ढूंढ रहे हैं, तो यह पोस्ट आपको हॉटवायर के साथ रेल को अगले स्तर तक ले जाने में मदद करेगी। यह लेख आपको सर्वर-साइड रेंडरिंग के लिए टूल का उपयोग करना सिखाएगा। हॉटवायर क्या

  1. एडब्ल्यूएस लैम्ब्डा के लिए रेल की तैनाती

    सर्वर रहित कंप्यूटिंग एक क्लाउड प्रदाता को सर्वर के प्रबंधन और प्रावधान के काम को उतारने में मदद करती है और तेजी से अधिकांश प्रौद्योगिकी टीमों के लिए एक चीज बन रही है। AWS लैम्ब्डा एक प्रकार की सर्वर रहित तकनीक है जिसका उपयोग कई तकनीकी टीमों द्वारा किया जाता है। AWS लैम्ब्डा NodeJS, Java, Python और

  1. रेल के साथ कोणीय का उपयोग करना 5

    आपने पहले कहानी सुनी है। आपके पास पहले से ही आपके विकेन्द्रीकृत और पूरी तरह से काम कर रहे बैक-एंड एपीआई और किसी भी सामान्य टूलसेट से बने फ्रंट-एंड पर चलने वाला एक एप्लिकेशन है। अब, आप कोणीय पर आगे बढ़ना चाहते हैं। या, शायद आप अपनी रेल परियोजनाओं के साथ एंगुलर को एकीकृत करने का एक तरीका ढूंढ रहे हैं