考虑以下界面:
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
对象是不是更好?
答案 0 :(得分:5)
如果您认为可以有多种PlayerInfo
(如果PlayerInfo
是一个类而不是结构,则可能就是这种情况),那么是。如果它可能永远不会改变,那么可能不会。
答案 1 :(得分:3)
如果您打算为单元测试创建模型,这可能是值得的。在这种特殊情况下,可能值得嘲笑IPlayerRepository
,但可能不是IPlayerInfo
。
答案 2 :(得分:1)
PlayerInfo
只是一个简单的数据存储结构,并没有太多的合同以接口的形式形式化。我避免为那些没有真正 DO 任何东西的类创建接口。
答案 3 :(得分:1)
这不仅仅是你是否会有一个不同类型的实体,还有它是否需要在测试过程中进行模拟。
如果您的实体永远不会执行任何业务逻辑,我个人也不会打扰。
答案 4 :(得分:1)
IMO。不要尝试为您尚未想到的类型编写代码。我发现编写有意义的代码总是更容易,并且不会过度抽象或过于复杂。当您的需求发生变化并且您有多种类型的PlayerInfo需要不同的实现时,您总是可以重构它。