Rails - 放置非活动记录模型的位置(目录)

Mic*_*ant 20 ruby activerecord model ruby-on-rails service-object

我们正在构建具有非数据库组件的模型的应用程序.我们很想知道其他人在rails社区中正在做些什么来解决这个问题.

我们正在努力把它们放在哪里.

我们应该:

app/models/domain
Run Code Online (Sandbox Code Playgroud)

要么

app/domain/models
Run Code Online (Sandbox Code Playgroud)

也许

app/models   # Business Models
app/models/ar # Active Record Models
Run Code Online (Sandbox Code Playgroud)

也许

app/models/domain/   # Business Models
app/models/domain/ar # Active Record Models
Run Code Online (Sandbox Code Playgroud)

部分原因是我们正在努力解决与铁路标准的接近程度以及创建一个对我们需要的产品有利的结构.

如果我们将对象视为服务对象,我们就可以

app/models/service-object
Run Code Online (Sandbox Code Playgroud)

app/models/ # For plain active record
Run Code Online (Sandbox Code Playgroud)

下去的另一条路线是app内没有东西,例如

/service_objects
Run Code Online (Sandbox Code Playgroud)

代替

/app/models/service_objects
Run Code Online (Sandbox Code Playgroud)

据推测,如果我们想要通过rails应用程序访问,我们最好使用app /以便利用约定优于配置.

Leo*_*rea 14

对于服务对象,您通常会将它们直接放在app目录下app/services/.工人和序列化程序也遵循这种模式app/workers/ app/serializers/.对于非AR的模型,您仍然可以将它们粘贴在模型目录中.这只是我的看法.

  • 同意这一点 - 在某一点上,如果你有适合特定功能的稳定非AR模型,你可以随时将它们提取到模块中. (2认同)

Mat*_*hew 14

根据我的经验,您放置这些模型的位置归结为它们在您的应用程序的特定上下文中的功能.

我通常保留app/models基于资源的模型.如果该模型表示由应用程序实例化和操作的资源,那么它就在这里.不需要AR或db支持.

如果模型提供一致的功能但参数不同,我会在app中为他们提供顶级目录.例如,app/mailers app/observers等等.但是,如果您有一个需要观察者的资源,那么在其中app/observers只有一个文件的dir 可能没有意义.

其他一切都进去了lib.有几个原因可以解释这个问题.

  1. 您可以选择何时需要文件lib.您可以更加有选择性地在应用启动时加载哪些文件.如果你把所有内容都放在了app/models你的内容中,那么你的内容就没有了.

  2. 随着应用程序的增长,命名空间模型在lib中更容易.当然你可以命名空间,app/models但几层嵌套app/models总是令人讨厌.最好保留命名空间lib.

  3. 当你在功能正确的地方放置东西时,家务管理会变得容易得多.这不是资源?这不是观察者?必须在lib.你把这个想法放在前面的全部原因是为开发人员提供可发现性.


sev*_*rin 9

如果它们是模型,则应将它们放入,app/models因为此目录适用于模型而不仅仅是ActiveRecord子类.