2013-12-07 8 views
0

Я пытаюсь создать приложение для теннисного турнира. Я изо всех сил пытаюсь найти способ разместить результаты для синглов и парных, не создавая двух таблиц.Имеет ли это наследование смысл?

Мне было интересно, может ли быть выполнено следующее:

public class Result 
{ 
    public int ResultId { get; set; } 
    public int TournamentId { get; set; } 
    public int Round { get; set; } 
    public DateTime? DatePlayed { get; set; } 
    public bool? Completed { get; set; } 
} 

public class ResultSingle : Result 
{ 
    public int Player1Id { get; set; } 
    public int Player1Score { get; set; } 
    public int Player2Id { get; set; } 
    public int Player2Score { get; set; } 
} 

public class ResultDouble : Result 
{ 
    public int Double1Id{ get; set; } 
    public int Double1Score { get; set; } 
    public int Double2Id { get; set; } 
    public int Double2Score { get; set; } 
} 

Итак, когда я запрашиваю свободные результаты будут запросить таблицу игрока и когда я запрашиваю Парные результаты он будет искать партнер Double.

Является ли это правильным или делает его абстрактным, иметь больше смысла?

+0

Вы планируете использовать 'Result' –

+0

Посмотрите на [Abstract Factory Pattern] (http://stackoverflow.com/questions/10513086/why-use-abstract-factory-pattern-in- с-диез). Это может вам помочь. – davideberdin

ответ

1

Ответ здесь на самом деле зависит от вопроса, вы когда-либо создадите экземпляр класса Result? если нет, то абстрактный класс, вероятно, будет лучшим вариантом. Нет ничего по своей сути неправильного в том, что вы сделали, но с одной точки зрения абстрактный класс заставляет вас использовать класс по назначению, поэтому в этом смысле он немного безопаснее.

+0

Думаю, я был бы «да». Я хочу иметь возможность показывать результаты, добавлять/редактировать их, поэтому мне придется создавать экземпляр класса. – JakkyD

0

Я согласен с вами, чтобы попытаться объединить две таблицы результатов как одну, поскольку она будет часто использоваться для запросов и отображения данных. На мой взгляд, вы можете определить только один класс результатов для хранения результата игры, но добавьте класс с именем «PlayerTeam», чтобы определить информацию о плательщиках, хотя это должно быть в соответствии с вашей структурой базы данных. поэтому мой код такой.

/// <summary> 
/// game result 
/// </summary> 
public class Result 
{ 
    public int ResultId { get; set; } 
    public int TournamentId { get; set; } 
    public int Round { get; set; } 
    public DateTime? DatePlayed { get; set; } 
    public bool? Completed { get; set; } 
    public PlayerTeam Team1 { get; set; } 
    public int Team1Score { get; set; } 
    public PlayerTeam Team2 { get; set; } 
    public int Team2Score { get; set; } 
    //double flag 
    public bool IsDouble { get; set; } 
} 

/// <summary> 
/// player team, in single game, there is only one player. 
/// </summary> 
public class PlayerTeam 
{ 
    public int TeamId { get; set; } 
    public int Player1Id { get; set; } 
    //if in single game, player2Id = 0 or -1, because there is only one player 
    public int Player2Id { get; set; } 
} 
+0

Спасибо за ответ. Я думал об этом варианте и имел индикатор. Но я подумал, почему у меня есть еще один стол для парного разряда, который включает в себя синглы ... когда я мог бы просто связать Результат с PlayerId. Но, думая об этом, это имеет больше смысла, потому что, как еще я узнаю, в каких турнирах находится этот проигрыватель. Без запроса таблицы результатов. Поэтому я думаю, что этот метод будет реализован. – JakkyD

+0

, но если это, когда игрок участвует во многих турнирах, как в одиночном, так и в двойном, вам нужно дважды запрашивать данные из разных классов? Я думаю, что невозможно напрямую получить этот результат, и почему я его проектирую, просто хочу отделить информацию о игроке от результата. –

Смежные вопросы