2011-01-21 8 views
2

は、次のインターフェイスを考慮してください簡単な戻り値の型のインターフェイスを作成する価値はありますか?

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

PlayerInfoが複数ある場合は、PlayerInfoがクラスで構造体ではない場合が考えられます。それがおそらく変わらないものなら、おそらくそうではないでしょう。

1

PlayerInfoは単なるデータ格納構造であり、インタフェースの形式で正式な契約を結ぶ必要はほとんどありません。私は本当にDO何もないクラスのインターフェイスを作成しないでください。

3

単体テスト用のモックアップを作成する予定がある場合は、これが役に立つかもしれません。この特定のケースでは、IPlayerRepositoryを嘲笑する価値があるかもしれませんが、おそらくIPlayerInfoではありません。

1

エンティティの種類が異なるかどうかだけではなく、テスト中に模擬が必要かどうかも重要です。

あなたのエンティティが決してビジネスロジックを実行しない場合、私は個人的には気にしません。

1

IMO。まだ考えていないタイプのコードを書こうとしないでください。私は、意味を成すコードを書く方がずっと簡単であり、過度に抽象化されていたり、過度に複雑ではないことが分かりました。要件が変更され、異なる実装が必要な複数のタイプのPlayerInfoがある場合は、いつでもリファクタリングすることができます。

関連する問題