RoR 教程为每个表提供一个模型,以便 ORM 工作。我的DB模式的大约70个表在概念上分为5组功能(例如,任何给定的表格都属于一个功能组,而不同组的表之间的关系被最小化了。)因此::我应该为每个概念组设计一个模型,还是应该只拥有 70 个 Rails 模型并保留分组“概念”?谢谢!

有帮助吗?

解决方案

我在我的一个大型应用程序中介绍了这一点,只需确保表/模型在概念上按名称分组(具有几乎 1:1 的表模型关系)。例子:

events
event_types
event_groups
event_attendees
etc...

这样,当我使用 TextMate 或其他工具时,模型文件会按 alpha 排序很好地分组在一起。我在这个应用程序中有 80 个模型,它运行良好,足以让一切井井有条。

其他提示

最有可能的是,您应该有 70 个模型。您可以将模型命名为具有 5 个命名空间,每个组一个,但这可能会带来更多麻烦。更有可能的是,每个组都有一些共同的功能。在这种情况下,我将为每个组创建一个包含其行为的模块,并将其包含在每个相关模型中。即使没有共享功能,这样做也可以让您快速查询模型的概念组。

您绝对应该为每个表使用一个模型,以便充分利用 ActiveRecord 的所有魔力。

但您也可以使用模块和子目录将模型分组到命名空间中,以避免管理模型目录中的 70 个文件。

例如,您可以:

app/models/admin/user.rb
app/models/admin/group.rb

对于模型 Admin::User 和 Admin::Group,以及

app/models/publishing/article.rb
app/models/publishing/comment.rb

用于发布::文章和发布::评论

等等...

如果不了解有关七十张桌子的性质及其概念关系的更多细节,就不可能给出一个好的答案。这些是旧表还是您从头开始设计的?

这些表是否通过某种继承模式相关?或者它们可能是吗?Rails 可以进行有限形式的继承。查找单表继承 (STI)。

就我个人而言,我会付出很大的努力来避免使用 70 个表,因为这是一项巨大的工作量 - 70 个模型和控制器以及它们的 4 个以上视图、帮助器、布局和测试,更不用说保持的内存负载问题ind 中的设计。当然,除非我按小时付费并且足够好以弥补重复。

在开始制作 70 个模型之前,请考虑这个问题以帮助您做出决定:

您的每个表是否都被视为“对象”(例如“汽车”表),或者某些表仅保存关系信息(例如所有外键列)?

在 Rails 中,只有“对象”表才成为模型!(特定类型的关联有一些例外)因此,如果您只有 5 组功能,则很可能没有 70 个模型。此外,如果您提到的功能组差异很大,它们甚至可能最适合自己的应用程序。

在少数情况下,您可以使用 Rails 标准单表继承模型。也许一个特定功能组中的所有类都具有相同的字段(或几乎全部相同)。在这种情况下,请利用 DRYness STI 优惠。但是,当它没有意义时,请使用每表类。

在每表类版本中,您无法轻松地将通用功能拉入基类中。相反,将其拉入模块中。像下面这样的层次结构可能会很有用:

app/models/admin/base.rb - module Admin::Base, included by all other Admin::xxx
app/models/admin/user.rb - class Admin::User, includes Admin::Base
app/models/admin/group.rb - class Admin::Group, includes Admin::Base

已经提到过,在不了解数据库架构等的情况下很难给出像样的建议,但是,我倾向于创建 70 多个模型(每个表一个)。

你也许可以放弃一些模型,但为了成本(可以忽略不计),你最好还是把它们放在那里。

您不需要为每个模型创建控制器+视图(如 srboisvert 所回答)。您只需要为每个资源配备一个控制器(我预计该数量将远少于 70 个 - 根据您的描述判断,可能只有 10 或 15 个左右)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top