RoR 教程为每个表假设一个模型以供 ORM 工作。我的数据库模式有大约 70 个表,在概念上分为 5 组功能(例如,任何给定的表都存在于一个且只有一个功能组中,并且不同组的表之间的关系被最小化。)所以:我应该为每个概念组设计一个模型吗? ,或者我应该简单地拥有 70 个 Rails 模型并保留分组“概念”?谢谢!
7 回答
最有可能的是,您应该有 70 个模型。您可以将模型命名为具有 5 个命名空间,每个组一个,但这可能比它的价值更麻烦。更有可能的是,您在每个组中都有一些共同的功能。在这种情况下,我会为每个包含其行为的组创建一个模块,并将其包含在每个相关模型中。即使没有共享功能,这样做也可以让您快速查询模型的概念组。
我通过确保表/模型在概念上按名称分组(具有几乎 1:1 的表模型关系),在我的一个大型应用程序中涵盖了这一点。例子:
events
event_types
event_groups
event_attendees
etc...
这样,当我使用 TextMate 或其他任何东西时,模型文件就会按 alpha 排序很好地组合在一起。我在这个应用程序中有 80 个模型,它运行良好,足以让事情井井有条。
为了充分利用 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
出版::文章和出版::评论
等等……
如果不了解有关 70 个表的性质及其概念关系的更多详细信息,实际上不可能给出一个好的答案。这些是旧表还是您从头开始设计的?
这些表是通过某种继承模式相关的还是可能是?Rails 可以进行有限形式的继承。查找单表继承 (STI)。
就个人而言,我会付出很多努力来避免使用 70 个表,因为那是一项非常大量的工作——70 个模型和控制器以及它们的 4 多个视图、助手、布局和测试,更不用说保持的内存负载问题了工业设计 当然,除非我按小时获得报酬,并且足以弥补重复。
在开始制作 70 个模型之前,请考虑以下问题以帮助您做出决定:
您的每个表是否都被视为“对象”,例如“汽车”表,或者某些表仅包含关系信息,例如所有外键列?
在 Rails 中,只有“对象”表成为模型!(特定类型的关联有一些例外)因此,如果您只有 5 组功能,您很可能没有 70 个模型。此外,如果您提到的功能组大不相同,它们甚至可能最适合自己的应用程序。
在少数情况下,您可以使用 Rails 标准的单表继承模型。也许一个特定功能组中的所有类都具有相同的字段(或几乎都相同)。在这种情况下,请利用 DRYness STI 提供的优势。但是,如果没有意义,请使用每表类。
在 class-per-table 版本中,您不能轻易地将常用功能拉入基类。相反,将其拉入一个模块。像下面这样的层次结构可能很有用:
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 个左右)。