【发布时间】:2015-01-21 22:38:01
【问题描述】:
我正在编写一个 Rails 应用程序,它必须允许第三方创建为我的应用程序添加服务支持的插件(即 gems)。这些插件都将实现相同的方法。
我了解到,最好的方法是使用单表继承 (STI),将所有逻辑保留在模型子类中并远离控制器。
这方面的一个例子是指标仪表板应用程序,它使用 Pingdom 插件将最近的网站响应时间添加到图表中。该插件将添加一个 Pingdom 子类,扩展一个 Metric 模型,实现 run 方法。此方法将由应用程序在运行每个插件的 run 方法的任务中调用。
制作这样一个基于插件的应用程序的正确方法是什么?它应该为所有逻辑使用模型吗?有没有更好的办法?
【问题讨论】:
-
第三方将如何与您的代码集成?你会添加他们的宝石吗?
-
@eabraham 可能会使用宝石,是的。
-
那么您将把他们的 gem 添加到您的 Gemfile 并运行
bundle install? -
您提到了运行方法和“实现相同的方法”。这些“宝石”会是一小段简单的代码吗?他们将如何与数据库交互?阅读和写作?
-
@eabraham 是的,它们将是用于实现第三方服务的一小段代码(参见我的示例)。插件将实现抽象方法(例如,在这种情况下,应用程序中的任务将运行插件实现的方法)。插件只会写入数据库;所有插件都将使用相同的字段。
标签: ruby-on-rails design-patterns plugins