日期:2014-05-17  浏览次数:20838 次

怎么设计属性比较好?
我老师是个女老师,
现在有两个字段:

 private double _allowance;  //补贴.
        private StuType _studentType;    //学生类型.
当学生类型为本科生时,补贴是"50"
当学生类型为研究生时,补贴是"500"
当学生类型为博士时,补贴是"2000"

在以上对应的属性中,我老师说,因为学生类型是驱动,所以在"学生类型"字段中设置"补贴"字段.

然后我就想不通了,那"补贴"字段是被驱动也是很有礼的...再说,我觉得在"学生类型"属性中设置"补贴"字段的值,貌似有点违反规定了...

------解决方案--------------------
如果补贴只属于学生,可以放到学生中,因为可能有不同的学生,为学生建立一个基类,补贴属性放到基类中
------解决方案--------------------
设计1会好点,从调用这个类的Allowance属性来说两者的效果一样
但是从面向对象的角度来看
StuType.Undergraduate和StudentType.UndergraduateAllowance这两个东西是业务相关,但是并不属于同一类事物,放到同一个枚举中会让人感觉很怪
最大的问题是,如果不同类别的学生(比如,还有特困生补贴,枚举子还要同时再加两个)
增加了耦合,这是需要避免的
不仅如此,对于这个类的内部实现来说,使用第一种设计,在方法里计算补贴时,可直接使用this._allowance,而不需要去调用this.Allowance属性(方法)导致每次都要做get里的运算

------解决方案--------------------
实际当中StudentType属性可以设计为虚的
------解决方案--------------------
将补贴设置为只读属性即可。
------解决方案--------------------

lz开帖的第一句话"我老师是个女老师"让我很纠结,和这个问题本身有什么关系,求解
------解决方案--------------------
引用:
引用:设计1会好点,从调用这个类的Allowance属性来说两者的效果一样
但是从面向对象的角度来看
StuType.Undergraduate和StudentType.UndergraduateAllowance这两个东西是业务相关,但是并不属于同一类事物,放到同一个枚举中会让人感觉很怪
最大的问题是,如果不同类别的学生(比如,……


放到静态类中,还不如放到enum中直观,但即便如此,随着学生补贴机制的改变,你的类或者enum都得不停地变化,并且double Allowance get实现还得变化,显著增加了耦合
你只要认识到属性是对字段的封装,疑问自然会消除
------解决方案--------------------
 public int UserId { get; set; }
 public string UserName { get; set; }
 public string UserPwd { get; set; }
------解决方案--------------------
补贴放到枚举里

    public enum 补贴
    {
        本科生 =50,

        研究生= 500,

        博士= 2000
    }

------解决方案--------------------
引用:
补贴放到枚举里
C# code?12345678    public enum 补贴    {        本科生 =50,         研究生= 500,         博士= 2000    }


不建议这类数据放到枚举里
这类数据都是会经常变的 
放枚举里面会悲剧的....
没事儿政策一变 补贴变了 你还得改code