【发布时间】:2011-05-26 04:57:47
【问题描述】:
我有一个有趣的问题要提出;什么时候应该创建一个模型类/对象,而不是为存储在数据库中的数据设置一个布尔标志?
例如,假设我有一个 Person 类,其中包含总统、警卫和兼职的布尔标志。根据标志的值,此类/模型的处理方式不同。因此,总统在系统中从 Guard 和 PartTime(r) 获得不同的权限。
什么时候会使用单表继承来表示这些信息,什么时候会继续使用布尔标志?
我的直觉是使用 STI 将这些转换为不同的对象,因为这对我来说似乎更面向对象。检查布尔值在某种程度上似乎是错误的,但我也可以看到它的位置。
更新说明
让我再举一个例子,因为上面的例子涉及的案例太多了。
我正在开发一个包含页面的 CMS 应用程序,一个页面可以是公共的、私有的、共享的、隐藏的或默认的(这意味着当你没有在 url 中指定页面时你会得到它)。现在,我们有一个 Page 模型,一切都是布尔标志 - Public、Default、Shared。
我不相信这是处理此问题的最佳方法。特别是因为我们有管理什么页面可以是什么的规则,即默认页面或共享页面必须是公共页面,而私有页面只是私有页面。
我同意下面的评论,即 Roles for the Person 示例很有意义。我不确定它是否适用于 Page 示例。
为了让事情变得更复杂,只能有一个默认页面和一个共享页面。 STI 可能允许我验证这一点,但我不确定,因为表中可能有许多默认页面和共享页面(只是与特定站点无关)。
注意:问题的上下文是 Ruby on Rails 应用程序,但适用于任何面向对象的语言。
【问题讨论】:
标签: ruby-on-rails oop object