关于策略模式在 rails 中的位置

About location of strategy pattern in rails

我正在 Rails 中实施策略模式,其中我有用户、项目、类别等模型,需要根据用户在视图中选择的各种算法(策略)为用户推荐项目。

我有一个 Recommend class,它有一个 recommend(user_id, strategy) 接口和 returns item_id 数组。 recommend 中的策略将在运行时根据用户在视图中选择的选项来决定。我已经将推荐界面放在/lib 目录中,将策略放在/lib/strategy 目录中。

我想确定我是否将文件放在正确的目录中,或者我是否需要将推荐 class 和所有策略放在模型中或其他任何地方。我真的很困惑。

在 Rails 中,所有特定领域的代码都属于 /app,而 /lib 是为外部依赖和共享代码保留的。

您可能会发现 "service objects" 有用,它们属于 /app/services。它们不是 ActiveRecord 类 并且没有数据库,它们通常与其他模型一起工作(执行服务)。

您会找到很多关于如何构建服务的信息,例如http://sporto.github.io/blog/2012/11/15/a-pattern-for-service-objects-in-rails/. There is also an excellent Railscast (subscribers only) http://railscasts.com/episodes/398-service-objects.