【问题标题】:How to properly setup class design for my program (C# .Net)如何为我的程序正确设置类设计(C# .Net)
【发布时间】:2012-08-11 00:30:07
【问题描述】:

我是一名自学成才的初级程序员。我设计了一个赛马程序,它读入一个文件,该文件包含每场比赛中每匹马的信息,包括该马前 10 场比赛的信息。然后将信息输出为可读的格式,有点像赛马形式或程序。

例如,8 月 10 日星期六在 Churchill Downs 有 9 场比赛,每场比赛有 8 匹马。因此,当天的 csv 文件将包含 72 匹马。这些马匹中的每一匹都会有他们最近 10 场比赛的统计数据。

我目前所做的是将 csv 文件读取到列表中。然后我将 List 中包含的信息转移到一个 Horse 对象的 List 中,它基本上存储了每匹马的所有信息。

我觉得使用类来存储所有信息的唯一好处是更容易操作这些数据,因为我不必记住索引。

我想知道是否有更好的方法来设计这个程序?有什么见解吗?

【问题讨论】:

  • 设计的一个关键要素是你需要知道你的程序会做什么。如果您所做的只是将文本文件中的数据读入内存,那么如何存储它并不重要。你的程序的用户应该如何与数据交互如果它只是计算信息并返回结果,它会进行什么样的计算呢?这些将帮助您确定您的设计。由于我们不知道这一点,我们很难说。
  • 它读入一个文件,计算所有马过去比赛的速度等级,然后显示速度等级以及所有其他非计算信息,如raceDate、finalTime、racePurse、finishPosition等. 我正在使用 Crystal Reports 来显示信息。用户不与数据交互,它是只读的。

标签: c# .net class


【解决方案1】:

如果您考虑一下这里的实际情况,您会发现马匹、比赛以及特定马匹在特定比赛中的表现。

所以,如果你允许你的类设计遵循这一点,你可能会有这样的事情:

public class Horse
{
    public string Name { get; set; }
    public Gender Gender { get; set; }
    public Breed Breed { get; set; }
    public DateTime WhenBorn { get; set; }
    // etc...

    public TimeSpan GetAge()
    {
        return DateTime.Now - WhenBorn;
    }
}

public class Race
{
    public string Venue { get; set; }
    public DateTime WhenStarted { get; set; }
    public DateTime WhenFinished { get; set; }
    // etc...
}

public class HorseRace
{
    public Race Race { get; set; }
    public Horse Horse { get; set; }
    public int? PlaceFinished { get; set; } // null if did not finish
    public string JockeyName { get; set; }
    public double HorseWeighIn { get; set; } // weight of horse at time of race
    public double JockeyWeighIn { get; set; } // weight of jockey at time of race
    // etc...
}

public enum Gender
{
    Colt,
    Filly
}

public enum Breed
{
    // fill in breeds here
}

一旦您有了自己喜欢的课程设计,您就可以开始考虑如何存储您的数据,以便更轻松地将其放入您的课程中。您可以为每个类创建一个单独的文件,而不是一个包含大量重复数据的巨型 csv 文件,例如 Horses.csv、Races.csv、HorseRaces.csv。最终,您可能希望从 CSV 升级到基于文件的小型数据库。

最终,您希望拥有三个列表:Horses、Races 和 HorseRaces。要显示这些列表,您可以遍历您的HorseRaces,并轻松获取您需要的所有数据,只需使用HorseRace 的属性,然后使用Race 和Horse 的属性。例如,horseRace.Horse.Name。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2011-03-05
    • 2021-02-03
    • 2017-04-05
    相关资源
    最近更新 更多