怎么设计属性比较好?
我老师是个女老师,
现在有两个字段:
private double _allowance; //补贴.
private StuType _studentType; //学生类型.
当学生类型为本科生时,补贴是"50"
当学生类型为研究生时,补贴是"500"
当学生类型为博士时,补贴是"2000"
在以上对应的属性中,我老师说,因为学生类型是驱动,所以在"学生类型"字段中设置"补贴"字段.
然后我就想不通了,那"补贴"字段是被驱动也是很有礼的...再说,我觉得在"学生类型"属性中设置"补贴"字段的值,貌似有点违反规定了...
------解决方案--------------------如果补贴只属于学生,可以放到学生中,因为可能有不同的学生,为学生建立一个基类,补贴属性放到基类中
------解决方案--------------------设计1会好点,从调用这个类的Allowance属性来说两者的效果一样
但是从面向对象的角度来看
StuType.Undergraduate和StudentType.UndergraduateAllowance这两个东西是业务相关,但是并不属于同一类事物,放到同一个枚举中会让人感觉很怪
最大的问题是,如果不同类别的学生(比如,还有特困生补贴,枚举子还要同时再加两个)
增加了耦合,这是需要避免的
不仅如此,对于这个类的内部实现来说,使用第一种设计,在方法里计算补贴时,可直接使用this._allowance,而不需要去调用this.Allowance属性(方法)导致每次都要做get里的运算
------解决方案--------------------实际当中StudentType属性可以设计为虚的
------解决方案--------------------将补贴设置为只读属性即可。
------解决方案--------------------
lz开帖的第一句话"我老师是个女老师"让我很纠结,和这个问题本身有什么关系,求解
------解决方案--------------------
放到静态类中,还不如放到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
}
------解决方案--------------------
不建议这类数据放到枚举里
这类数据都是会经常变的
放枚举里面会悲剧的....
没事儿政策一变 补贴变了 你还得改code