Bạn đang tìm kiếm một số đá quý mới và thú vị để thử?
Sau đó, hãy xem dry-rb , một bộ đá quý mang lại giải pháp cho các vấn đề chung. Dry-rb bao gồm hơn 18 viên ngọc Ruby có thể kết hợp với nhau hoặc tự chúng.
Một số loại đá quý này bao gồm :
- bộ khởi tạo khô
- cấu trúc khô khan
- xác thực khô
- sự kiện khô khan
- giao dịch khô khan
Trong bài đăng này, bạn sẽ tìm hiểu về 3 trong số những loại đá quý này để bạn có thể thưởng thức dry-rb phải cung cấp!
Cách tạo cấu trúc tốt hơn với cấu trúc khô
Ruby Struct là một loại đối tượng mà bạn có thể tạo từ lớp Struct, nhưng chúng có một số hạn chế.
Ví dụ :
Bạn có thể tạo một cấu trúc với một số đối số bị thiếu và không nhận được khiếu nại từ Ruby.
Với dry-struct
bạn có thể tạo cấu trúc chặt chẽ hơn.
Đây là cách thực hiện :
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: [])
Bây giờ nếu bạn bỏ lỡ một trong các thuộc tính, bạn sẽ gặp lỗi sau:
[Video.new] :comments is missing in Hash input
Không phải là thông báo lỗi thân thiện với người dùng nhất, nhưng nó sẽ giải quyết được mọi việc.
Bạn có thể tạo các loại của riêng mình &thêm các ràng buộc cho chúng:
module Types include Dry::Types.module Age = Integer.constrained(gt: 0) end
"Gt" này có nghĩa là "lớn hơn".
Vì vậy, Age
phải là một số nguyên lớn hơn 0.
Bạn có thể có giá trị mặc định không?
Có, đây là cách thực hiện :
module Types include Dry::Types.module Name = String.default('') end
Có một phiên bản ngắn hơn để tạo cấu trúc Dry, giống như cấu trúc Ruby thông thường.
Ví dụ :
Book = Dry::Struct(title: Dry::Types["string"]) Book.new(title: "Computer Science 101")
Triển khai mô hình trình quan sát với các sự kiện khô
Mẫu thiết kế Người quan sát là khi một nguồn xuất bản bản cập nhật cho nhiều người nghe , đây có thể là cập nhật tin tức, cảnh báo về kho hàng, tin nhắn mới trong cuộc trò chuyện nhóm, v.v.
Đó là một mô hình chung.
Ruby bao gồm một mô-đun có thể quan sát được giúp bạn thực hiện điều này.
Nhưng dry-events
là một tùy chọn khác.
Bạn có thể tạo một nhà xuất bản như thế này :
require 'dry/events/publisher' class Blog include Dry::Events::Publisher[:blog] register_event('article.published') register_event('article.upated') end
Bây giờ :
Bất kỳ lớp nào cũng có thể tự đăng ký để nhận các sự kiện này khi chúng xảy ra.
Đây là cách thực hiện :
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)
Bạn có thể phát sự kiện với publish
phương pháp:
blog.publish('article.published', title: 'How to Use The dry-events Gem')
Một điều tôi nhận thấy với viên ngọc này là nếu bạn đăng ký hoặc xuất bản một sự kiện không tồn tại thì sự kiện đó sẽ không tồn tại một cách âm thầm .
Tiêm phụ thuộc với dry-auto_inject
Phụ thuộc là gì?
Phụ thuộc là thứ mà một lớp cần để hoạt động, giống như các đối tượng và lớp khác.
Bạn có thể tạo các đối tượng này trực tiếp trong lớp của mình ...
Hoặc bạn có thể sử dụng tiêm phụ thuộc .
Việc tiêm phụ thuộc là khi các phụ thuộc được "tiêm" vào lớp. Nói cách khác, chúng được chuyển vào dưới dạng tham số.
Ví dụ :
require 'faraday' class GitHubAPI def initialize(http_client = Faraday.new) @http_client = http_client end end
Làm điều này cho phép bạn kiểm soát sự phụ thuộc và làm cho việc kiểm tra dễ dàng hơn.
Bây giờ :
dry-auto_inject
tạo các đối tượng này cho bạn. Tất cả những gì bạn phải làm là khai báo những phụ thuộc nào cần thiết.
Trong ví dụ này Fruit
phụ thuộc vào 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
Bạn phải cho biết đối tượng được tạo ra như thế nào:
Import = Dry::AutoInject({ 'store' => Store.new })
Và cung cấp nó cho lớp học:
include Import['store']
Sau đó, bạn có thể tạo một Fruit
với một Store
khác như thế này:
Fruit.new(store: MyStore.new)
Bạn không cần đá quý để sử dụng tính năng tiêm phụ thuộc, nhưng thật thú vị khi xem một cách khác để thực hiện điều đó.
Tóm tắt
Bạn đã tìm hiểu về dry-rb, một tập hợp các viên ngọc Ruby thú vị mà bạn có thể sử dụng để giải quyết các vấn đề thiết kế cụ thể trong mã của mình.
Bây giờ đến lượt bạn thực hành và thử cái này!
Cảm ơn vì đã đọc.