首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义表示年龄组的类?

如何定义表示年龄组的类?
EN

Stack Overflow用户
提问于 2014-12-15 02:39:48
回答 1查看 153关注 0票数 1

我需要能够定义不同的年龄组,比如10-11岁,12-13岁等等。

我如何代表一个AgeGroup类,使年龄能够适当地将今天、明天和将来的人聚在一起,也就是说,今天的11岁的人可以在明天12岁(在这种情况下,他将被分组为12-13组,而不是10-11岁的组,就像他昨天一样)。

到目前为止我有这样的想法:

代码语言:javascript
复制
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(); }
    }
}

该类定义了适用此年龄组的时间范围。当适用的日期范围被通过时,我们需要及时地改变一切。但有什么更好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-15 02:44:23

如果您正在考虑将年龄范围存储在某种描述的person对象中,我不会这样做,因为(1)从出生日期起,它是一个容易计算的值;和(2)它实际上不是对象的属性(可以这么认为,但它的短暂性会使事情变得比需要的复杂)。

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

你仍然可以有年龄范围,但人本身并不存在“在”他们。相反,您可以将person对象传递给函数,并让它返回相关的范围。

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

如果这是不可能的(从您提供的图表中可以看出这可能很困难):

然后,您可以使用您目前的出生日期,但稍加修改,允许事情年复一年地发生变化。

有一个season对象,该对象具有以下字段:

  • 开始约会。
  • range对象的集合。

这将允许您拥有多个season对象,例如,如果年龄范围在随后几年中发生了变化。只要不改变,就只有一个season对象,它的开始日期是2014/15赛季开始时。

然后,range对象本身就是表单对象的集合:

代码语言:javascript
复制
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对象(通常是在今天,尽管您可能也希望查看较早的季节)。
  • 检查该季节的所有范围对象,直到您找到一个人的出生日期介于开始日期和结束日期之间的范围。如果你找不到合适的范围,那么他们就不允许玩。
  • 然后提取范围名称。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27476606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档