我要实现的功能是管理一些不同类别的设备:
各类设备的属性不一样,而且可以由用户来自定义各类设备的属性
例如:
手机类的设备可能会有“品牌”,“型号”,“出厂日期”等属性
存储卡类的设备可能会有“容量”,“类型”等属性
......另外各种设备需要有修改日志,日志的记录可能有(0~n)条。请问为了实现这样的功能,我应该怎么样构建这组类呢

解决方案 »

  1.   

    手机和存储卡不存在共性,不用为它们设计共同的基类,其它的类看情况设计,估计也不需要基类。
    至于自定义属性,可以使用XML序列化。
      

  2.   

    由用户来自定义各类设备的属性
    ===========>
    .NET中的反射工厂可以实现加载新的类别
      

  3.   

    就是采用数据库管理了,数据库已经设计好,能满足用户的要求,但是实现的时候总得要写代码吧?问题就是编码的时候如何编写类来实现如帜子中的要求。
    数据库结构如下:
    Device表:存放各种类别的设备
    ID 自动编号
    CID 用户自定义的编号
    Name 名称
    Status 状态
    Category 类别(用此标识是哪类设备,与Device_CustomField_Category表关联)
    Holder 持有人
    Administrator 管理员Custom_field表:存放所有的自定义属性
    ID 编号(自动编号)
    Name 名称(显示在窗体中属性名称)
    Typ 类型(显示的样式,如文本框,下拉列表,单选框)
    DefaultValue 默认值(若是单选,复选,列表框时给一个以","隔开的字符串)
    Regexp (字段的匹配正则表达式,用来限制用户输入)
    Minlen (最小的长度)
    Maxlen (最大的长度)Device_CustomField_Category表:用来关联设备和类别,以表明某自定义属性属于哪个类别
    FieldID 自定义属性编号
    CategoryID 类别编号
    Sequence 这个字段可以不要,主要用来归定自定义属性在显示时的顺序Device_CustomField_Value表:用来存放某个设备的自定义属性的值
    FieldID 自定义属性编号 
    DeviceID 设备编号
    Value 自定义属性的值
      

  4.   

    Device表设计为基类,Device_CustomField_Value表设计为子类。
    也可以用工厂来管理这些类。
      

  5.   

    wdzr_826(舞指如歌(大鱼.NET)) :
    是动态的,要不然我就不来这里面来问了
      

  6.   

    CSharpProgrammer(风儿吹过):
    我想访问其属性和方法啊,例如访问其动态的属性,还有需要其历史记录,修改某个属性等等,具体你能说说吗?
    我觉得你说的想法符合我的要求。
      

  7.   

    用泛型的Key-Value键值对做属性
      

  8.   

    everywhen(那天,我醉了!) ( ) 信誉:100  2007-09-17 14:12:43  得分: 0  
     
     
       需求还不清楚啊!
    就是说要做设备的管理,设备的种类由用户自己定义,各种类别的设备的属性也由用户自己定义(除编号,状态等几个属性每个设备都有)。
      
     请问LZ,这里的“用户”是指开发者还是最终用户
      

  9.   

    kaishui_gu:所有东西都是开发人员做,但给用户更多的灵活性。具体你可能也不明白吧。
      

  10.   

    三层结构知道吗O/R Mapping知道吗那就OK
      

  11.   

    给你一段代码仅供参考:
    public class AttributeLog
        {
            public void writeLog()
            {
                //
            }        public void readLog()
            {
                //
            }
        }    public class DeviceAttribute
        {
            public string name;
            public Object value;
            public  AttributeLog log;
            public override string ToString()
            {
                return name + ":" +  value.ToString();
            }
        }    public class Device
        {
            private System.Collections.Generic.Dictionary<string, DeviceAttribute> attributes = null;
            public System.Collections.Hashtable Atttributes
            {
                get
                {
                    return this.attributes;
                }
            }        public DeviceAttribute this[string attributeName]
            {
                get
                {
                    return this.attributes[attributeName];
                }            set
                {
                    this.attributes[attributeName] = value;
                }
            }
        }