Стоит ли создавать интерфейс для тривиального типа возвращаемого значения? - PullRequest
2 голосов
/ 21 января 2011

Рассмотрим следующие интерфейсы:

public interface IPlayerRepository
{
  IPlayerInfo GetPlayerInfo(int id);
}

public interface IPlayerInfo
{
  public int Id { get; set; }
  public int GamesPlayed { get; set; }
  public int GamesWon { get; set; }
}

и связанные реализации:

public class PlayerRepository : IPlayerRepository
{
  IPlayerInfo GetPlayerInfo(int id)
  {
    // read from external data store
    return new PlayerInfo();
  }
}

public class PlayerInfo : IPlayerInfo
{
  public int Id { get; set; }
  public int GamesPlayed { get; set; }
  public int GamesWon { get; set; }
}

Есть ли какое-либо значение в наличии отдельного интерфейса IPlayerInfo, учитывая, что класс существует только как набор свойств, которые будут возвращены этим методом? Желательно ли, чтобы метод IPlayerRepository.GetPlayerInfo возвращал конкретный PlayerInfo объект?

Ответы [ 5 ]

5 голосов
/ 21 января 2011

Если вы думаете, что можете иметь более одного вида PlayerInfo (что, вероятно, имеет место, если PlayerInfo является классом, а не структурой), тогда да.Если это то, что, вероятно, никогда не изменится, то, вероятно, нет.

3 голосов
/ 21 января 2011

Если вы планируете создавать макеты для модульного тестирования, это может быть полезно. В этом конкретном случае, возможно, стоит подшутить над IPlayerRepository, но, вероятно, не над IPlayerInfo.

1 голос
/ 22 января 2011

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

1 голос
/ 21 января 2011

Дело не только в том, будет ли у вас когда-либо другая сущность, но также в том, будет ли она нуждаться в насмешках во время тестирования.

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

1 голос
/ 21 января 2011

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

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