Ruby on rails 3 您将把resque worker和rails控制器共享的代码放在哪里?

Ruby on rails 3 您将把resque worker和rails控制器共享的代码放在哪里?,ruby-on-rails-3,resque,Ruby On Rails 3,Resque,我有一个rails控制器和一个resque工作人员。两者都有一些共同的功能。我应该把这些函数放在哪里,以便遵循DRY原则和Rails约定?取决于这些方法实际做了什么,但是/lib可能是一个好地方。对我来说,这听起来是服务层的一个好例子。我的一位同事写了一个很好的概念总结: 在域驱动设计中,Evans将服务定义为操作 作为独立于模型中的接口提供。换句话说 换句话说,服务是一种行动,而不是一件事。而不是强迫 操作到现有对象中,我们应该将其封装到 独立的、无状态的服务 域服务为用例编写脚本 涉及多个

我有一个rails控制器和一个resque工作人员。两者都有一些共同的功能。我应该把这些函数放在哪里,以便遵循DRY原则和Rails约定?

取决于这些方法实际做了什么,但是
/lib
可能是一个好地方。

对我来说,这听起来是服务层的一个好例子。我的一位同事写了一个很好的概念总结:

在域驱动设计中,Evans将服务定义为操作 作为独立于模型中的接口提供。换句话说 换句话说,服务是一种行动,而不是一件事。而不是强迫 操作到现有对象中,我们应该将其封装到 独立的、无状态的服务

域服务为用例编写脚本 涉及多个域对象。将此逻辑强制放入域中 对象是笨拙的,因为这些用例通常涉及外部规则 任何单一对象的责任

服务层是许多其他web应用MVC框架中的一个常见特性,当fat模型没有在其问题域中提供适当的职责封装时,许多Rails应用程序会选择使用服务层


如果不知道更多,我恐怕无法提供更具体的答案。我的下一步是尝试考虑这个服务应该命名什么。这是一家制造我们有名字的东西的工厂吗?我们可以用它来命名一个特定的角色吗?

这些函数负责做什么?这些函数正在创建一个由模型组成的复杂数据结构。如上所述,它们进行一些计算,并创建一个复杂的数据结构,供控制器视图和resque worker发送的电子邮件使用。哈哈,我把这样的代码放到
lib/services
已经很久了!很高兴知道我并不孤单:)@SergioTulentsev你当然不孤单。不过,我会将服务添加到
应用程序/服务
。它们是你的应用程序的重要组成部分,理应如此组织,这也有助于防止
lib
成为一个包罗万象的东西。我使用过的应用程序通常在默认Rails应用程序的
app
下有几个子文件夹。不要害怕根据需要添加自己的。实际上,这是个好主意。我会努力的。