ruby-on-rails - Rails 架构问题

标签 ruby-on-rails architecture oop model

我正在构建一个 Rails 站点,除其他外,它允许用户构建自己的配方存储库。食谱可以手动输入,也可以通过指向另一个站点的链接输入(想想 epicuriouscooks.com 等)。我正在编写脚本,该脚本将在给定用户链接的情况下从这些网站上抓取食谱,到目前为止(尽管存在法律问题)这部分并没有给我带来任何麻烦。

但是,我不确定将我为这些爬虫脚本编写的代码放在哪里。我的第一个想法是把它放在食谱模型中,但是去那里似乎有点太复杂了;图书馆或助手会更合适吗?

另外,正如我所提到的,我正在为不同的食品网站构建几个不同的刮板。在我看来,这样做的优雅方法是定义一个接口(interface)(或抽象基类),该接口(interface)确定一组方法,用于在给定链接的情况下构造配方对象,但我不确定最好的方法是什么在这里,要么。我如何构建这些 OO 关系,代码应该放在哪里?

最佳答案

这件事有两个显而易见的方面。首先是你将如何存储食谱,这将是模型。显然,模型不会抓取其他站点,因为它们只有一个职责:存储有效​​数据。您的 Controller (将启动抓取和存储过程)也不应该包含抓取代码(尽管他们会调用它)。

虽然在 Ruby 中我们不使用抽象类或接口(interface)——它是鸭子类型的,所以你的抓取工具实现一个已知方法或一组方法就足够了——你的抓取引擎应该都是相似的,尤其是在公共(public)方面他们公开的方法。

你可以把你的刮刀——这是蹩脚的答案——放在你想要的任何地方。 lib很好,但是如果您想制作一个插件,那也可能不是一个坏主意。查看我的问题 here - 着名的 Rails 专家 Yehuda Katz 给出了惊人的答案 - 对于其他一些想法,但总的来说:没有正确的答案。不过,也有一些错误的。

关于ruby-on-rails - Rails 架构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2749821/

相关文章:

ruby - 我们如何谈论不从 Ruby 中的 `Class` 类继承的类?

javascript - 有没有更好的方法来处理 Node.js/Expressjs 中的嵌套回调?

swift - 我应该使用 Delegation 还是 DataStore 在 Clean Swift 架构中向后传递数据?

c++ - 有没有一种方法可以在不使用 new 的情况下从函数返回抽象(出于性能原因)

ruby-on-rails - Capistrano 当前应用路径

architecture - 在设计软件平台时,构成成功的可插拔架构的关键要素是什么?

java - 静态变量和方法是否属于该类的 java.lang.Class 对象?

ruby-on-rails - Rails 3,将局部变量传递给部分

ruby-on-rails - 当锁定在 rails 上的对象上释放时?

ruby-on-rails - 如何一步建立一个带有子工厂的父工厂以通过验证