我有一个有趣的问题要提出来; 应该何时创建模型类/对象而不是为存储在数据库中的数据设置布尔标志?
例如,假设我有一个Person类,它具有President,Guard和PartTime的布尔标志.根据标志的值,对此类/模型的处理方式不同.因此,总统从Guard和PartTime(r)获得系统中的不同权限.
什么时候使用单表继承来表示这个信息,什么时候会继续使用布尔标志?
我的直觉是使用STI将它们转换为不同的对象,因为这对我来说似乎更为OO.检查布尔值在某种程度上似乎是错误的,但我也可以看到它的位置.
更新澄清
让我使用另一个例子,因为上面的例子涉及太多案件.
我正在使用包含Pages的CMS应用程序,页面可以是公共页面,私有页面,共享页面,隐藏页面或默认页面(这意味着它是您在URL中未指定页面时获得的内容).现在,我们有一个Page模型,一切都是一个布尔标志 - Public,Default,Shared.
我不相信这是处理这个问题的最佳方法.特别是因为我们有规则来管理哪个页面可以是什么,即默认页面或共享页面必须是公共页面,而私有页面只是私有.
我同意下面的评论,Roles for the Person示例非常有意义.我不确定它的Page例子是什么.
而要使事情变得更复杂,只能有一个默认页面和一个共享页面.STI可能允许我验证这一点,但我不确定,因为表中可能有许多默认和共享页面(只是没有与特定站点相关联).
注意:问题的上下文是Ruby on Rails应用程序,但适用于任何面向对象的语言.
我试图在ASP.NET MVC RC2中构建一个HtmlHelper扩展.这段代码在预览版5中运行良好,但在RC2中不再有用,我试图理解为什么.这是代码:
public static string EmptyDropDownList(this HtmlHelper htmlHelper, string name, object htmlAttributes)
{
return htmlHelper.DropDownList(name, new SelectList(new string[0]), htmlAttributes);
}
Run Code Online (Sandbox Code Playgroud)
问题是我无法从扩展方法中访问htmlHelper上的所有方法.因此,找不到htmlHelper.DropDownList.
有什么建议?