Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Dry-rb는 무엇입니까?

새롭고 흥미로운 보석을 찾고 계십니까?

그런 다음 dry-rb를 살펴보세요. , 일반적인 문제에 대한 솔루션을 제공하는 보석 세트. Dry-rb는 함께 또는 단독으로 작동할 수 있는 18개 이상의 Ruby 보석으로 구성됩니다.

이러한 보석 중 일부는 다음과 같습니다. :

  • 드라이 이니셜라이저
  • 건조 구조
  • 건조 검증
  • 드라이 이벤트
  • 드라이 트랜잭션

이 게시물에서는 이 보석 중 3개에 대해 배워 dry-rb가 무엇인지 맛볼 수 있습니다. 제공해야 합니다!

dry-struct로 더 나은 구조체를 만드는 방법

Ruby Struct는 Struct 클래스에서 생성할 수 있는 일종의 객체이지만 몇 가지 제한이 있습니다.

예를 들어 :

누락된 인수가 많은 구조체를 만들고 Ruby에서 불만을 받지 않을 수 있습니다.

dry-struct 사용 gem을 사용하면 더 엄격한 구조체를 만들 수 있습니다.

방법은 다음과 같습니다. :

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

일반 Ruby 구조체와 유사한 Dry 구조체를 만들기 위한 더 짧은 버전이 있습니다.

:

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이 필요하지는 않지만, 다른 방법을 사용하는 것이 흥미롭습니다.

요약

코드의 특정 디자인 문제를 해결하는 데 사용할 수 있는 흥미로운 Ruby 보석 세트인 dry-rb에 대해 배웠습니다.

이제 여러분이 연습하고 시도해 볼 차례입니다!

읽어주셔서 감사합니다.