Rails应用程序中的命名空间模型

时间:2012-03-28 18:30:12

标签: ruby-on-rails rails-models

我最近与我的一位朋友进行了讨论,他也是一名RoR开发人员。我们争论如何管理Rails模型。我个人喜欢在默认命名空间中只留下根模型(例如User,Article,Bill等),并且依赖模型转到一个模块(例如User :: Profile,User :: Activity),其名称为root他们与之相关的模型。

另一方面,我看到许多项目在默认命名空间中有100个模型,如user_profile,user_activity等。从Java(Spring)开发来看,java社区倾向于在包中组织类并将它们逻辑分组,我觉得这很有吸引力。

所以问题是:在模块中对模型进行分组是否有任何缺点(除了额外的:关系定义中的class_name),是否存在人们通常不这样做的具体原因?

1 个答案:

答案 0 :(得分:4)

虽然命名空间有其优点,但它确实需要在整个模型中添加例外。对于关联,Foo :: Bar假定表名为bars,同样bar_id,而您可能更喜欢使用foo_barsfoo_bar_id

如果您对此非常感兴趣,可能需要查看是否有适合您的附加组件,或者实现您自己的扩展程序。

我使用名称空间的唯一情况是在第三方应用程序中使用的附加组件,我不想声明根级别的模型名称,因为这会令人讨厌。在这种情况下额外的努力是值得的。

如果您因为看到100多个模型文件而没有任何分组而感到困扰,那么您可能会因为看到100多个没有分组的表而同样烦恼,这通常是您无法解决的问题。

控制器可以很自然地进行分组,但模型不容易适应,至少没有库存ActiveRecord。