Как создать класс person, который позволяет отслеживать значения свойств с течением времени - PullRequest
0 голосов
/ 19 февраля 2020

Я хотел бы создать класс person, у которого есть свойство, значение которого может изменяться со временем, но я хочу сохранить историю значений. Человек растет со временем, и его вес может измениться. Вы можете представить себе «HockeyPlayer: Person», который играет в течение многих сезонов. Каждый сезон их рост / вес могут быть разными. Затем я бы использовал EntityFramework для создания таблиц. Я думаю, что главный вопрос, который у меня есть, - куда мне поместить эти свойства? В своем классе? В хоккей-плеер? Лично? Заранее спасибо

пример псевдокода:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public System.DateTime DateOfBirth { get; set; }
}

public class Season 
{
    public int Id { get; set; }
    public string season { get; set; }
}

public class HockeyPlayer : Person
{
    public int PersonId {get; set; }
    public int SeasonId { get; set; }
    public int JerseyNumber { get; set; }
    public int HeightInches { get; set; }
    public int WeightPounds { get; set; }
}

Ответы [ 3 ]

1 голос
/ 19 февраля 2020

Я не уверен, что модель вашего домена действительно моделирует то, что вы ищете. Не думайте, что ваш игрок играет в сезоне как игрок. Игрок участвует в сезоне и получает запись за информацию о сезоне c. Таким образом, у игрока есть история сыгранных сезонов. игрок не история сезонов.

Я думаю, я бы определил что-то вроде этого

public class Player
{
    public Player() { Seasons = new List<PlayerSeason> { }; }

    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public System.DateTime DateOfBirth { get; set; }
    public IEnumerable<PlayerSeason> Seasons { get; private set; } 

    public void AddSeason(PlayerSeason playerSeason)
    {
        //some code that adds a season.  may check if already exists. whatever your business rules say to do
        Seasons.Add(playerSeason);
    }
}

public class Season 
{
    public int Id { get; set; }
    public string season { get; set; }
}

public class PlayerSeason
{
    public int PlayerId {get; set; }
    public int SeasonId { get; set; }
    public int JerseyNumber { get; set; }
    public int HeightInches { get; set; }
    public int WeightPounds { get; set; }
}

Я не собираюсь вдаваться в такие причудливые вещи, как инкапсуляция коллекции , здесь уже достаточно, чтобы подумать около.

Я бы взял классы сущностей, которые вы здесь определили, а затем построил бы, используя ef-migrations.

0 голосов
/ 19 февраля 2020

Один из способов - создать отдельную таблицу со столбцами роста, веса и даты с идентификатором игрока в качестве вторичного ключа. Вызовите эту таблицу PhysicalStats, например. Ваш HockeyPlayer будет иметь список PhysicalStats, а не только свойства одного роста / веса, как в настоящее время.

0 голосов
/ 19 февраля 2020

Я бы порекомендовал провести некоторое исследование нормализации базы данных .

Я бы создал другую сущность под названием PersonMetrics с атрибутами SeasonId, PersonId и Date. Затем вы добавите все значения, которые вы хотите измерить в этом. Технически SeasonId и PersonId могли бы сформировать составной первичный ключ (в этом случае вам лучше было бы поместить Date в сущность Season), но для простоты использования с EntityFramework, или если будет проведено несколько измерений за сезон, вы можете выбрать его его собственный идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...