Ruby插件架构
发布时间:2020-12-16 21:55:40 所属栏目:百科 来源:网络整理
导读:我想要一个非常基本的一个基本程序的例子,读取两个插件并注册它们.这两个插件以不冲突的方式以相同的方式挂接到基本程序中. 对于这个问题,我非常喜欢使用任何编程语言进行元编程,我不知道从哪里开始. 解决方法 我一直在处理这个问题一段时间.我已经尝试了许
我想要一个非常基本的一个基本程序的例子,读取两个插件并注册它们.这两个插件以不冲突的方式以相同的方式挂接到基本程序中.
对于这个问题,我非常喜欢使用任何编程语言进行元编程,我不知道从哪里开始. 解决方法
我一直在处理这个问题一段时间.我已经尝试了许多不同的方法去做,并征求了很多人的意见.我仍然不知道我是否是“正确的方式”,但它的工作很好,很容易做到.
在我的情况下,我特别看配置和引入配置插件,但原理是一样的,即使我的术语是特定于cnfiguration. 在一个非常基本的层面上,我有一个没有配置的配置类 – 它是空的.我还有一个Configure方法返回配置类,并可以调用它的方法: # config.rb class Configuration end class MySystem def self.configure @config ||= Configuration.new yield(@config) if block_given? @config end Dir.glob("plugins/**/*.rb").each{|f| require f} end MySystem.configure do |config| config.some_method config.some_value = "whatever" config.test = "that thing" end puts "some value is: #{MySystem.configure.some_value}" puts "test #{MySystem.configure.test}" 要在配置类中获取some_method和some_value,我有插件通过模块扩展配置对象: # plugins/myconfig.rb module MyConfiguration attr_accessor :some_value def some_method puts "do stuff,here" end end class Configuration include MyConfiguration end 和 # plugins/another.rb module AnotherConfiguration attr_accessor :test end class Configuration include AnotherConfiguration end 要加载插件,您只需要一个代码来查找特定文件夹中的.rb文件并“需要”它们.这个代码可以随时随地运行,当它包含它的文件被加载…我可能把它放在MySystem的类定义或类似的东西开始.也许在其他地方移动它有意义. Dir.glob("plugins/**/*.rb").each{|f| require f} 运行config.rb,你会得到如下输出: do stuff,here some value is: whatever test that thing 有很多选择来实现这个的各个部分,但这应该让你走下去. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |