3 回答
TA贡献1815条经验 获得超10个赞
Rails中的单表继承
简而言之:对象之间需要有明确的OO风格的继承关系(由womble雄辩地说明),而不仅仅是一些共享数据。如果没有自然而明显的类层次结构,随着应用程序的发展,STI设计可能会变得难以维护。
其次,您应该考虑将所有数据放在一个表中是否很重要。使用多态关联,您的数据库查询将变得更加复杂,并且可能更慢。如果您计划在网站上列出所有对象(例如,在表格中),那么STI可能就是您的选择。
第三,确保您的子类没有太多的唯一属性。使用一个表中的所有数据,您不需要很多非全局列。这些不仅会占用空间(不是主要问题),而且会使数据结构混乱。如果您有“特殊”列,则应在代码中明确解释它们。
最后,如果您使用STI,我强烈建议您为所有子模型使用单个控制器。控制器的主要功能是提供对象的访问,如果需要以非常不同的方式访问对象,那么STI可能不是开始时的正确设计选择。
TA贡献1719条经验 获得超6个赞
我可能会使用STI或根本没有特殊功能。您可以将所有内容称为“个人档案”,如果用户为零则您知道它是否为“机器人”。您也可以在不使用STI的情况下存储“类型”字段。
某些事情会影响我使用STI的决定:
是否存在特定于机器人的逻辑
有多少机器人与用户配置文件(少数机器人意味着STI是好的 - 很多机器人,我可能会将它们存储在其他地方)
避免STI的原因有时会妨碍你。例如,将对象从一种类型更改为另一种类型(在这种情况下为Bot到配置文件)可能相当烦人。有时一个简单的“类型”字段更好。
值得注意的是,如果使用STI,您可能需要一个公共基类。所以,你可能希望Profile
,BotProfile
和UserProfile
。这些名字取决于你。:)
- 3 回答
- 0 关注
- 512 浏览
添加回答
举报