2011-12-18 8 views
0

インタフェースなしでリポジトリパターンを実装するのは悪いですか?インタフェースのないリポジトリパターン

リポジトリ - クラス

public class WebRepository<T> 
{ 
    private readonly Type persitentType = typeof(T); 
    public virtual T GetById(int id) 
    { 
     return NHibernateSession.Get<T>(id); 
    } 
    public virtual List<T> GetAll() 
    { 
     return GetByCriteria(); 
    } 
    public List<T> GetByCriteria(params ICriterion[] criterion) 
    { 
     ICriteria criteria = NHibernateSession.CreateCriteria(persitentType); 
     foreach (ICriterion criterium in criterion) 
      criteria.Add(criterium); 
     return criteria.List<T>() as List<T>; 
    } 
    public T Save(T entity) 
    { 
     NHibernateSession.Save(entity); 
     return entity; 
    } 
    public T SaveOrUpdate(T entity) 
    { 
     NHibernateSession.Update(entity); 
     return entity; 
    } 
    public void Delete(T entity) 
    { 
     NHibernateSession.Delete(entity); 
    } 
    private ISession NHibernateSession 
    { 
     get 
     { 
      return SessionManager.CurrentSession; 
     } 
    } 
} 

我々は ProductRepository使用リポジトリ延長希望の場合:リポジトリとoverriderを\方法を拡張します。

私はインターフェイスは、私たちを聞かせて知っている

:私はNHibernateはを交換し、テストを記述するのに十分な時間を持っていないしたくない場合は

  • 使用TDD方式

を永続性エンジンを交換してくださいしかし、 。だから、他の利点は、(IRepository<T>, IProductRepositoryで)

おかげで、古典的なリポジトリパターンを使用するアンドリュー

+3

テストを書く時間がありませんか?私はあなたがデバッグのための時間がたくさんあることを願っています! –

答えて

6

インターフェースなしでリポジトリパターンを実装については何も悪いありません、それはあなたが使用する必要があると感じかどうかはあなた次第ですインターフェイスかどうか。

インターフェイスを使用する理由が明記されているように、ビジネスロジックレイヤーからのパーシスタンスレイヤーの抽象化を維持することはもちろん、テスト容易性のためです。しかし、あなたができる場合保証付きあなたはあなたのバックエンドを変更しないでください(または、あなたは近い将来変更を見越すことはできません)、テストを書くつもりはありません(大きな間違い)インターフェイスを使用する必要はありません。

は、テストを書くのに十分な時間がありません。」です。これは今の場合かもしれませんが、将来、あなたがの場合は、に時間がありますか?繰り返しますが、これはあなたの判断ですが、もし私があなたであれば、あなたのコードに何らかの害を及ぼすことはないので、インターフェイスを使用します(あなたがテストを全く書かなかったとしても)。バックエンドの切り替えやテストの作成を決断した場合は、将来的に多くの面倒な作業を省くことができます。

+0

依存関係注入は、インターフェイスを使用するもう一つの理由です。 +1良い答えのため – BZink

0

Mocking!
何らかの理由でデータベースにアクセスできない可能性があります。インターフェイスを使用すると、実データとダミーデータを簡単に切り替えることができます。

+0

私はテスト目的のために私たちの心にそれを必要とする? –

関連する問題