কম্পিউটার

Dry-rb কি?

চেষ্টা করার জন্য কিছু নতুন এবং আকর্ষণীয় রত্ন খুঁজছেন?

তারপর dry-rb দেখুন , রত্নগুলির একটি সেট যা সাধারণ সমস্যার সমাধান নিয়ে আসে। Dry-rb 18 টিরও বেশি রুবি রত্ন দ্বারা গঠিত যা একসাথে বা নিজেরাই কাজ করতে পারে।

এই রত্নগুলির মধ্যে কিছু রয়েছে :

  • ড্রাই-ইনিশিয়ালাইজার
  • শুষ্ক কাঠামো
  • শুষ্ক-বৈধকরণ
  • শুষ্ক ঘটনা
  • শুষ্ক-লেনদেন

এই পোস্টে, আপনি এই রত্নগুলির মধ্যে 3টি সম্পর্কে শিখবেন যাতে আপনি কি শুষ্ক-rb এর স্বাদ পেতে পারেন অফার করতে হবে!

কীভাবে ড্রাই-স্ট্রাকট দিয়ে আরও ভালো স্ট্রাকট তৈরি করবেন

রুবি স্ট্রাকট হল এক ধরনের অবজেক্ট যা আপনি স্ট্রাকট ক্লাস থেকে তৈরি করতে পারেন, কিন্তু তাদের কিছু সীমাবদ্ধতা রয়েছে।

উদাহরণস্বরূপ :

আপনি অনেকগুলি অনুপস্থিত আর্গুমেন্ট সহ একটি কাঠামো তৈরি করতে পারেন এবং রুবির কাছ থেকে কোনও অভিযোগ পাবেন না৷

dry-struct দিয়ে মণি আপনি কঠোর কাঠামো তৈরি করতে পারেন.

এখানে কিভাবে :

require 'dry-struct'

module Types
  include Dry::Types.module
end

class Video < Dry::Struct
  attribute :title, Types::String
  attribute :views, Types::Views
  attribute :comments, Types::Array
end

Video.new(title: "abc", views: 10, comments: [])

এখন আপনি যদি একটি বৈশিষ্ট্য মিস করেন তবে আপনি এই ত্রুটিটি পাবেন:

[Video.new] :comments is missing in Hash input

সবচেয়ে ব্যবহারকারী-বান্ধব ত্রুটি বার্তা নয়, তবে এটি কাজগুলি সম্পন্ন করে৷

আপনি আপনার নিজস্ব প্রকারগুলি তৈরি করতে পারেন৷ এবং তাদের মধ্যে সীমাবদ্ধতা যোগ করুন:

module Types
  include Dry::Types.module

  Age = Integer.constrained(gt: 0)
end

এই "gt" মানে "এর চেয়ে বড়।"

তাই Age 0 এর থেকে বড় একটি পূর্ণসংখ্যা হতে হবে।

আপনার কি ডিফল্ট মান থাকতে পারে?

হ্যাঁ, এখানে কিভাবে :

module Types
  include Dry::Types.module

  Name = String.default('')
end

ড্রাই স্ট্রাকস তৈরির জন্য একটি সংক্ষিপ্ত সংস্করণ রয়েছে, যা নিয়মিত রুবি স্ট্রাকটের মতো।

উদাহরণ :

Book = Dry::Struct(title: Dry::Types["string"])

Book.new(title: "Computer Science 101")

শুষ্ক-ইভেন্টগুলির সাথে পর্যবেক্ষক প্যাটার্ন বাস্তবায়ন করা

পর্যবেক্ষক ডিজাইন প্যাটার্ন হল যখন একটি উৎস অনেক শ্রোতাদের কাছে একটি আপডেট প্রকাশ করে৷ , এটি একটি সংবাদ আপডেট, স্টক সতর্কতা, একটি গ্রুপ চ্যাটে নতুন বার্তা, ইত্যাদি হতে পারে।

এটি একটি সাধারণ প্যাটার্ন।

রুবি একটি পর্যবেক্ষণযোগ্য মডিউল অন্তর্ভুক্ত করে এটি আপনাকে এটি বাস্তবায়নে সহায়তা করে৷

কিন্তু dry-events আরেকটি বিকল্প।

আপনি এভাবে একজন প্রকাশক তৈরি করতে পারেন৷ :

require 'dry/events/publisher'

class Blog
  include Dry::Events::Publisher[:blog]

  register_event('article.published')
  register_event('article.upated')
end

এখন :

যেকোন শ্রেণী এই ঘটনাগুলি গ্রহণ করার জন্য নিজেকে নিবন্ধন করতে পারে যখন সেগুলি ঘটে।

এখানে কিভাবে :

class Reader
  def on_article_published(event)
    puts "New article published: #{event[:title]}"
  end

  def on_article_updated(event)
    puts "Article has been updated: #{event[:title]}"
  end
end

blog   = Blog.new
reader = Reader.new

blog.subscribe(reader)

আপনি publish দিয়ে একটি ইভেন্ট সম্প্রচার করতে পারেন পদ্ধতি:

blog.publish('article.published', title: 'How to Use The dry-events Gem')

এই রত্নটির সাথে আমি একটি জিনিস লক্ষ্য করেছি যে আপনি যদি এমন একটি ইভেন্ট সাবস্ক্রাইব করেন বা প্রকাশ করেন যা বিদ্যমান নেই এটি নীরবে ব্যর্থ হবে .

ড্রাই-অটো_ইনজেক্ট সহ ডিপেনডেন্সি ইনজেকশন

নির্ভরতা কি?

একটি নির্ভরতা হল এমন কিছু যা একটি শ্রেণীকে কাজ করতে হয়, যেমন অন্যান্য অবজেক্ট এবং ক্লাস।

আপনি এই বস্তুগুলি সরাসরি আপনার ক্লাসে তৈরি করতে পারেন...

অথবা আপনি নির্ভরতা ইনজেকশন ব্যবহার করতে পারেন .

নির্ভরতা ইনজেকশন হল যখন নির্ভরতাগুলি ক্লাসে "ইনজেকশন" করা হয়। অন্য কথায়, তারা পরামিতি হিসাবে পাস করা হয়।

উদাহরণ :

require 'faraday'

class GitHubAPI
  def initialize(http_client = Faraday.new)
    @http_client = http_client
  end
end

এটি করার ফলে আপনি নির্ভরতা নিয়ন্ত্রণ করতে এবং পরীক্ষাকে সহজ করতে পারবেন।

এখন :

dry-auto_inject আপনার জন্য এই বস্তু তৈরি করে। আপনাকে যা করতে হবে তা ঘোষণা করতে হবে কি কি নির্ভরতা প্রয়োজন।

এই উদাহরণে Fruit Store এর উপর নির্ভর করে :

require 'dry/auto_inject'

class Store
  def bananas
    puts 'Have some organic bananas!'
  end
end

Import = Dry::AutoInject({ 'store' => Store.new })

class Fruit
  include Import['store']

  def eat
    store.bananas
  end
end

fruit = Fruit.new
fruit.eat

আপনাকে বলতে হবে কিভাবে বস্তুটি তৈরি হয়:

Import = Dry::AutoInject({ 'store' => Store.new })

এবং এটি ক্লাসের জন্য উপলব্ধ করুন:

include Import['store']

তারপর আপনি একটি Fruit তৈরি করতে পারেন একটি ভিন্ন Store সহ এই মত:

Fruit.new(store: MyStore.new)

নির্ভরতা ইনজেকশন ব্যবহার করার জন্য আপনার মণির প্রয়োজন নেই, তবে এটি করার অন্য উপায় দেখতে আকর্ষণীয়।

সারাংশ

আপনি ড্রাই-আরবি সম্পর্কে শিখেছেন, আকর্ষণীয় রুবি রত্নগুলির একটি সেট যা আপনি আপনার কোডে নির্দিষ্ট নকশা সমস্যা সমাধান করতে ব্যবহার করতে পারেন।

এখন আপনার অনুশীলন করার পালা এবং এটি চেষ্টা করে দেখুন!

পড়ার জন্য ধন্যবাদ।


  1. একটি তীর অপারেটর কি, C++ এ `->`?

  2. কিভাবে C++ এ একটি স্ট্যাটিক ক্লাস তৈরি করবেন?

  3. C# এ একটি নন-স্ট্যাটিক ক্লাস কি?

  4. কেন আমরা ক্লাস তৈরি করব?