假如我数据库里设计的表是学生表:id,name,sex,score,class;
这样在数据库没问题,在项目中我新建一个实体Student:Name,Sex,Score,Class就可以。
但是在程序中如果要求每个班的平均成绩,分数标准差,方差这些外来的东西(在数据库和实体都没有,但是在中间过程求后,在最后要用到,所以不能用变量来存)现在我想问的是下面哪种方法比较好,就是来保存(每个班的平均成绩,分数标准差,方差)1.在我原来的实体Student上增加 平均成绩,分数标准差,方差这些 属性;
然后以每个班级的第一个同学(student first)为标记,计算后为这3个字段赋值,list<student> a=new list<student>,遍历所有班级,每次都添加班级的第一个同学a.add(first);这种方法是每个班的第一个同学的平均成绩,分数标准差,方差有正确的值,其他同学的这3个值都为0(这样感觉其他每个同学都存了3个无用的值,但是数据库“多对一"正适合这条规则啊)2.再弄一个实体Class:平均成绩,分数标准差,方差,班级,专门来存在者3个值请问到底用哪种方法好啊,谢谢!
这样在数据库没问题,在项目中我新建一个实体Student:Name,Sex,Score,Class就可以。
但是在程序中如果要求每个班的平均成绩,分数标准差,方差这些外来的东西(在数据库和实体都没有,但是在中间过程求后,在最后要用到,所以不能用变量来存)现在我想问的是下面哪种方法比较好,就是来保存(每个班的平均成绩,分数标准差,方差)1.在我原来的实体Student上增加 平均成绩,分数标准差,方差这些 属性;
然后以每个班级的第一个同学(student first)为标记,计算后为这3个字段赋值,list<student> a=new list<student>,遍历所有班级,每次都添加班级的第一个同学a.add(first);这种方法是每个班的第一个同学的平均成绩,分数标准差,方差有正确的值,其他同学的这3个值都为0(这样感觉其他每个同学都存了3个无用的值,但是数据库“多对一"正适合这条规则啊)2.再弄一个实体Class:平均成绩,分数标准差,方差,班级,专门来存在者3个值请问到底用哪种方法好啊,谢谢!
使用分部类的做法是,将这些额外的字段/方法写在分部类文件中,而和数据库对应的实体属性则由代码生成器去维护,这样兼顾了代码生成器的工作和你的程序。
或者使用扩展方法,将一个实体对象的操作放在扩展方法中,使得从api接口上看,它们似乎和实体类在一起,实际上编码却分开来。(3)如果你自己设计ORM,你可以充分利用Attribute,来标记那些非数据库存储的字段,比如你可以设计这样的API
[TableName("table_students")]
class Student
{
[Field("ID")]
public int ID { get; set; }
[Field("Name")]
public string Name { get; set; }
[NavProperties("table=table_Scores", "key=StudentID")]
public List<Score> Scores { get; set; }
[SQL("SELECT AVG(Value) FROM Score WHERE StudentID = {0}", "{ID}")]
public int AvgScore { get; set; }
}
然后你的ORM根据Attribute去装载组合。
你的想法跟我第二种方法差不多,但我想的是不继承,直接新建一个实体,加入:平均成绩,分数标准差,方差,如果要用到student的属性如Class,那我就直接在新建的实体中加入Class属性,请问这样跟你的继承有什么不同吗?