【问题标题】:Creating the same model from multiple data sources从多个数据源创建相同的模型
【发布时间】:2010-08-16 11:13:23
【问题描述】:
这主要是一个设计模式问题。我有一种模型,我将获取数据以从多个来源创建它们。因此,例如,我可以从 API 创建一条记录,而另一条记录是通过 Nokogiri 的屏幕抓取创建的。
我的问题在于如何最好地抽象出这些不同的数据源。现在我正在构建返回相同哈希的库类,然后我用它来设置模型的属性。但我想知道这是否不是更多使用 STI 的案例。或者如果有其他方法可以做到这一点,我只是没有考虑。
【问题讨论】:
标签:
ruby-on-rails
ruby
design-patterns
single-table-inheritance
【解决方案1】:
我认为您的设计决策很大程度上取决于需要存储哪些属性。根据您的描述,听起来您有一个具有多个数据源的模型,但无论来源如何,它都会存储相同的属性。在那种情况下,STI 似乎有点矫枉过正。当您从表中检索一行时,源是 API 还是屏幕抓取器是否重要?如果没有,那么您可以为每个数据源定义单独的方法并在控制器中使用适当的方法。
@instance = MyModel.new(:datasource=>"API")`
我想说不要担心继承(或从模块中混合代码),除非你真的需要。有一些问题——例如,某些 gem/插件不完全支持 STI。