Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

Dry-rb คืออะไร?

กำลังมองหาอัญมณีใหม่และน่าสนใจที่จะลองอยู่หรือไม่

แล้วมาดูที่ dry-rb อัญมณีชุดหนึ่งที่นำวิธีแก้ปัญหาทั่วไป Dry-rb ประกอบด้วยทับทิม 18 เม็ดที่สามารถทำงานร่วมกันหรือด้วยตัวเอง

อัญมณีเหล่านี้บางส่วนรวมถึง :

  • ตัวเริ่มต้นแบบแห้ง
  • โครงสร้างแบบแห้ง
  • การตรวจสอบแบบแห้ง
  • เหตุการณ์แห้ง
  • ธุรกรรมแห้ง

ในโพสต์นี้ คุณจะได้เรียนรู้เกี่ยวกับอัญมณี 3 ชนิดนี้ เพื่อให้คุณได้ลิ้มลองว่า dry-rb คืออะไร มีให้!

วิธีการสร้างโครงสร้างที่ดีขึ้นด้วยโครงสร้างแบบแห้ง

Ruby Struct เป็นวัตถุชนิดหนึ่งที่คุณสามารถสร้างได้จากคลาส Struct แต่มีข้อจำกัดบางประการ

ตัวอย่างเช่น :

คุณสามารถสร้างโครงสร้างที่มีอาร์กิวเมนต์ที่ขาดหายไปจำนวนมาก &ไม่ได้รับการร้องเรียนจาก Ruby

ด้วย 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

มีเวอร์ชันที่สั้นกว่าสำหรับการสร้าง Dry struct ซึ่งคล้ายกับ Ruby struct ปกติ

ตัวอย่าง :

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

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

การนำรูปแบบผู้สังเกตการณ์ไปใช้กับเหตุการณ์แบบแห้ง

รูปแบบการออกแบบของผู้สังเกตการณ์คือเมื่อแหล่งเดียว เผยแพร่การอัปเดตให้กับผู้ฟังจำนวนมาก อาจเป็นข่าวอัพเดท แจ้งเตือนสต๊อก ข้อความใหม่ในกลุ่มแชท ฯลฯ

เป็นรูปแบบทั่วไป

Ruby มี โมดูลที่สังเกตได้ ที่ช่วยให้คุณนำไปใช้ได้

แต่ 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')

สิ่งหนึ่งที่ฉันสังเกตเห็นเกี่ยวกับอัญมณีนี้คือถ้าคุณสมัครรับข้อมูลหรือเผยแพร่กิจกรรมที่ไม่มีอยู่ จะล้มเหลวโดยไม่แสดงตัว .

การฉีดพึ่งพาด้วย dry-auto_inject

การพึ่งพาคืออะไร

การพึ่งพาคือสิ่งที่คลาสต้องทำงาน เช่นเดียวกับอ็อบเจ็กต์และคลาสอื่นๆ

คุณสามารถสร้างวัตถุเหล่านี้ได้โดยตรงในชั้นเรียนของคุณ...

หรือคุณสามารถใช้ การแทรกการพึ่งพา .

การฉีดการพึ่งพาคือเมื่อมีการ "ฉีด" การพึ่งพาในชั้นเรียน กล่าวอีกนัยหนึ่งคือส่งผ่านเป็นพารามิเตอร์

ตัวอย่าง :

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)

คุณไม่จำเป็นต้องมี gem เพื่อใช้การพึ่งพาอาศัยกัน แต่การดูวิธีอื่นทำได้น่าสนใจมาก

สรุป

คุณได้เรียนรู้เกี่ยวกับ dry-rb ซึ่งเป็นชุดของ Ruby gem ที่น่าสนใจซึ่งคุณสามารถใช้แก้ปัญหาการออกแบบเฉพาะในโค้ดของคุณได้

ตอนนี้ถึงตาคุณแล้วที่จะฝึกฝนและลองทำสิ่งนี้!

ขอบคุณสำหรับการอ่าน