我需要能够定义不同的年龄组,比如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(); }
}
}该类定义了适用此年龄组的时间范围。当适用的日期范围被通过时,我们需要及时地改变一切。但有什么更好的方法吗?
发布于 2014-12-15 02:44:23
如果您正在考虑将年龄范围存储在某种描述的person对象中,我不会这样做,因为(1)从出生日期起,它是一个容易计算的值;和(2)它实际上不是对象的属性(可以这么认为,但它的短暂性会使事情变得比需要的复杂)。
相反,只存储出生日期,然后提供一些代码,这些代码可以根据出生日期和当前日期提供一个年龄范围。
你仍然可以有年龄范围,但人本身并不存在“在”他们。相反,您可以将person对象传递给函数,并让它返回相关的范围。
而且,如果可能的话,年龄范围应该是基于年龄而不是出生日期,因为前者是不变的--你不必在范围之间“移动”对象,因为这是自动的,因为它们的范围是从出生日期和当前日期计算出来的。
如果这是不可能的(从您提供的图表中可以看出这可能很困难):

然后,您可以使用您目前的出生日期,但稍加修改,允许事情年复一年地发生变化。
有一个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对象(通常是在今天,尽管您可能也希望查看较早的季节)。https://stackoverflow.com/questions/27476606
复制相似问题