我需要能够定义各种年龄组,即10 - 11,12 - 13等。
我如何代表AgeGroup课程,以便年龄可以在今天,明天和将来适当地将人们聚集在一起,即今天11岁的人明天可以12岁(在这种情况下,他将被分组到正如他昨天所做的那样,12-13组而不是10-11岁组。
到目前为止,我有这个:
public class AgeGroup
{
public string Name { get; protected set; }
public DateRange BirthDateRange { get; protected set; }
public Guid Id { get; protected set; }
public Status Status { get; protected set; }
public virtual DateRange ApplicableDateRange { get; set; }
public AgeGroup(Guid id, string name, DateRange birthDateRange,DateRange applicableDateRange)
{
Id = id;
Name = name;
Status = status;
BirthDateRange = birthDateRange;
ApplicableDateRange = applicableDateRange;
}
}
public class DateRange
{
public DateRange(DateTime startDate, DateTime endDate)
{
StartDate = startDate;
EndDate = endDate;
}
DateTime _startDate;
DateTime _endDate;
public virtual DateTime StartDate
{
get { return _startDate; }
set { _startDate = value.ToUniversalTime(); }
}
public virtual DateTime EndDate
{
get { return _endDate; }
set { _endDate = value.ToUniversalTime(); }
}
}
此类定义此年龄组适用的时间范围。当适用的日期范围通过时,我们需要及时转移所有内容。但是有更好的方法吗?
答案 0 :(得分:2)
如果您考虑将年龄范围存储在某些描述的person
对象中,我不会,因为(1)它是从出生开始的一个易于计算的值日期; (2)它不是对象的一个属性(可以被认为是如此,但它的瞬态性会使事情变得比需要的更复杂。)
相反,只存储出生日期,然后提供一些代码,这些代码可以根据出生日期和当前日期给出年龄范围。
你仍然可以拥有年龄范围但人们自己并不存在"内部"他们。相反,您可以将人物对象传递给一个函数,并让它返回相关范围。
并且,如果可能的话,年龄范围应该基于年龄而不是出生日期,因为前者是不变的 - 你不必去"移动"范围之间的对象,因为它们的范围是从其出生日期和当前日期计算出来的。
如果不可能(并且从您提供的图表中显示可能很难):
然后你可以像现在一样使用出生日期,但稍作修改就可以让事情每年都有所改变。
拥有一个season
对象,其中包含以下字段:
range
个对象的集合。如果年龄范围在以后年份发生变化,这将允许您拥有多个season
个对象。只要他们不改变,您只会有一个season
对象,其开始日期为2014/15赛季的开始。
range
个对象本身就是以下形式的对象集合:
Start birth date End birth date Range name
---------------- -------------- ----------
1993-01-01 1993-07-31 U22
1993-08-01 1994-07-31 U21
1994-08-01 1995-07-31 U20
:
2009-08-01 2010-07-31 U5
2010-08-01 2010-12-31 U4
然后,为了找出某人所属的年龄组,您:
season
对象,尽管可以想象您也可以查看早期的季节。