本人语言表述能力有待提高,还是举个例子来说明一下吧!以新闻系统为例,每则新闻都属于一个新闻类别。下面是我对这个新闻类别的设计存有的疑问,望GGDDJJMM指点迷津!疑问一:这个新闻类别是另存一张表,在新闻表中做外键关联呢?还是直接以文本形式存放在新闻表中?(本人选择第一种方式
疑问二:在疑问一种,若采用第一种方式,那么关于这个新闻类别是映射成实体呢?还是映射成枚举?
疑问三:若新闻类别映射成实体那么显然利于维护,但程序的可读性欠佳;若新闻类别映射成枚举,程序可读性提高但后期一旦类别发生变化,必然需要更改枚举,不利于维护。如何取舍呢?在我参与的项目中,有些选择了实体,有些选择了枚举,搞得我很是困惑,真诚希望各位给予指导,谢谢!

解决方案 »

  1.   

    个人意见,但不表示一定这样做:疑问一:这个新闻类别是另存一张表,在新闻表中做外键关联呢?还是直接以文本形式存放在新闻表中?(本人选择第一种方式) 
       :最好另建立一个表来存放类别,至少有两个字段(ID int, Title varchar(50)),使用ID做为关键字与新闻表做关联。疑问二:在疑问一种,若采用第一种方式,那么关于这个新闻类别是映射成实体呢?还是映射成枚举? 
       :不太理解这个实体和枚举是什么意思,不过我的做法是使用ID做为关键字,以整数数值做对应。和枚举类似。疑问三:若新闻类别映射成实体那么显然利于维护,但程序的可读性欠佳;若新闻类别映射成枚举,程序可读性提高但后期一旦类别发生变化,必然需要更改枚举,不利于维护。如何取舍呢? 
       :对应到程序里,可以声明一个结构体(或类)来记录ID和Title的关系,这样会提高可读性及易操作性。
      

  2.   

    感谢LX的回复!我说的实体是指:
    public class NewsCategory
    {
      public int ID{ get; set;}
      public string Title {get; set;}
    }我说的枚举指的是:
    public enum NewsCategory
    {
      None = 0,
      Category1 = 1,
      Category2 = 2,
      // ...
    }如果使用枚举的话,在程序中可以使用NewsCategory.Category1来访问,但不利于维护
      

  3.   

    class C1
    {
        enum Opeat:short
        {
            Add,
            Edit,
            Delete
        }    public void Do(int i, Opeat p)
        {
            string msg = string.Empty;
            switch (p)
            {
                case Opeat.Add: msg = "添加"; break;
                case Opeat.Edit: msg = "编辑"; break;
                case Opeat.Delete: msg = "删除"; break;
            }        Message.Alert("Id" + i.ToString() + msg + "成功");
        }
    }