例如,假设我有一个Person类,其中包含总统、警卫和兼职等布尔标志。这个类/模型根据标志的值而被不同地处理。所以总统在系统中得到不同于警卫和兼职人员的特权。
什么时候应该使用单表继承来表示这些信息,什么时候应该继续使用布尔标志呢?
我的直觉告诉我,使用STI将它们转换为不同的对象更符合面向对象的思想。检查布尔值似乎有些不对劲,但我也能看到它的用处。
更新说明:
让我举个例子,因为上面那个例子涉及的情况太多了。
我正在开发一个CMS应用程序,其中包含页面,页面可以是公共的、私有的、共享的、隐藏的或默认的(意思是当你在url中没有指定页面时会显示默认页面)。现在,我们有一个页面模型,一切都是布尔标志——公共、默认、共享。
我不确定这是处理这个问题的最佳方法。特别是因为我们有规则来管理哪个页面可以是什么,例如,默认页面或共享页面必须是公共页面,而私有页面只是私有的。
我同意下面的评论说Person示例中的角色非常有意义。但对于页面示例,我不确定是否也是如此。
为了让事情更加复杂,只能有一个默认页面和一个共享页面。STI可以让我验证这一点,但我不确定,因为表中可能有许多默认页面和共享页面(只是没有与特定站点相关联)。
注:问题的上下文是Ruby on Rails应用程序,但适用于任何面向对象的语言。