如何定义代表年龄组的类?

时间:2014-12-15 02:39:49

标签: date-range domain-model

我需要能够定义各种年龄组,即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(); }
    }
}

此类定义此年龄组适用的时间范围。当适用的日期范围通过时,我们需要及时转移所有内容。但是有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

如果您考虑将年龄范围存储在某些描述的person对象中,我不会,因为(1)它是从出生开始的一个易于计算的值日期; (2)它不是对象的一个​​属性(可以被认为是如此,但它的瞬态性会使事情变得比需要的更复杂。)

相反,只存储出生日期,然后提供一些代码,这些代码可以根据出生日期和当前日期给出年龄范围。

你仍然可以拥有年龄范围但人们自己并不存在"内部"他们。相反,您可以将人物对象传递给一个函数,并让它返回相关范围。

并且,如果可能的话,年龄范围应该基于年龄而不是出生日期,因为前者是不变的 - 你不必去"移动"范围之间的对象,因为它们的范围是从其出生日期和当前日期计算出来的。

如果可能(并且从您提供的图表中显示可能很难): enter image description here

然后你可以像现在一样使用出生日期,但稍作修改就可以让事情每年都有所改变。

拥有一个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对象,尽管可以想象您也可以查看早期的季节。
  • 浏览该季节的所有范围对象,直到找到人员出生日期介于范围的开始日期和结束日期之间。如果您没有找到符合条件的范围,则不允许他们玩游戏。
  • 然后提取范围名称。