dry-system 开源项目教程
项目介绍
dry-system
是一个基于 Ruby 的应用框架,提供状态管理和内置的依赖注入支持。它基于 dry-container
和 dry-auto_inject
,允许你在任何环境中配置可重用的组件,设置加载路径,并引入所需的依赖。dry-system
支持测试模式,并提供方便的存根 API,使得在多个系统之间共享组件变得容易。
项目快速启动
安装
首先,确保你已经安装了 Ruby 3.0 或更高版本。然后,通过 Gem 安装 dry-system
:
gem install dry-system
创建一个新项目
创建一个新的 Ruby 项目,并在 Gemfile
中添加 dry-system
:
# Gemfile
source 'https://rubygems.org'
gem 'dry-system'
运行 bundle install
安装依赖。
配置和使用
创建一个 system
目录,并在其中创建一个 container.rb
文件:
# system/container.rb
require 'dry/system/container'
class MyApp < Dry::System::Container
configure do |config|
config.root = Pathname(__dir__).join('..')
config.component_dirs.add 'lib'
end
end
Import = MyApp.injector
在 lib
目录中创建一个 my_app
目录,并添加一个 user.rb
文件:
# lib/my_app/user.rb
class User
def initialize(name)
@name = name
end
def greet
"Hello, #{@name}!"
end
end
在 system/boot
目录中创建一个 user.rb
文件,注册 User
类:
# system/boot/user.rb
MyApp.boot(:user) do
start do
register('user', User.new('World'))
end
end
最后,在 main.rb
文件中使用 User
类:
# main.rb
require_relative 'system/container'
user = MyApp['user']
puts user.greet
运行 ruby main.rb
,你应该会看到输出:
Hello, World!
应用案例和最佳实践
应用案例
dry-system
可以用于构建复杂的应用程序,特别是在需要依赖注入和模块化设计的场景中。例如,一个多租户的 SaaS 应用程序可以使用 dry-system
来管理不同租户的配置和依赖。
最佳实践
- 模块化设计:将应用程序分解为多个独立的组件,每个组件负责一个特定的功能。
- 依赖注入:使用依赖注入来管理组件之间的依赖关系,避免硬编码依赖。
- 测试模式:在测试模式下使用存根 API,方便进行单元测试和集成测试。
典型生态项目
dry-system
是 dry-rb
生态系统的一部分,与以下项目紧密集成:
- dry-container:一个简单的依赖注入容器。
- dry-auto_inject:自动注入依赖的工具。
- dry-rails:为 Rails 应用程序提供
dry-system
支持。
通过这些项目的协同工作,dry-system
提供了一个强大的框架,帮助开发者构建可维护和可扩展的应用程序。