กำลังมองหาอัญมณีใหม่และน่าสนใจที่จะลองอยู่หรือไม่
แล้วมาดูที่ 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 ที่น่าสนใจซึ่งคุณสามารถใช้แก้ปัญหาการออกแบบเฉพาะในโค้ดของคุณได้
ตอนนี้ถึงตาคุณแล้วที่จะฝึกฝนและลองทำสิ่งนี้!
ขอบคุณสำหรับการอ่าน