2017-11-02 5 views
-1

私は同じ方法の多くを持つ2つのインターフェイスを持っており、DRYの原則を破るようです。どのように私は私のインターフェイスでこれらの重複したメソッドを持っていない場所を得ることができますか?それともインターフェイスには関係ありませんか?2つのほぼ同一のインターフェースで何をすればよいですか?

インタフェース1:

public interface IRepositoryBase<TEntity> where TEntity : class 
{ 
    void Commit(); 
    void Delete(object id); 
    void Delete(TEntity entity); 
    void Dispose(); 
    IQueryable<TEntity> GetAll(); 
    IQueryable<TEntity> GetAll(object filter); 
    TEntity GetById(object id); 
    TEntity GetFullObject(object id); 
    IQueryable<TEntity> GetPaged(int top = 20, int skip = 0, object orderBy = null, object filter = null); 
    void Insert(TEntity entity); 
    void Update(TEntity entity); 
} 

インタフェース2:

public interface IThirdWaveRepositoryBase<TEntity> where TEntity : class 
{ 
    IQueryable<TEntity> GetAll(); 
    IQueryable<TEntity> GetAll(object filter); 
    TEntity GetById(object id); 
    TEntity GetFullObject(object id); 
    IQueryable<TEntity> GetPaged(int top = 20, int skip = 0, object orderBy = null, object filter = null); 
} 
+0

第1インターフェイスが第2インターフェイスを継承(延長)できないのはなぜですか?何を試しましたか? _specifically_あなたが把握できないものは何ですか? –

+0

@PeterDuniho、私はインターフェイスについて学んでいます。今、私はそれらを使用するビデオで言われたので、私はそれらを使用しています。私はそれらを完全に理解しようとしています。私が理解しているところから、 'どこのTentity:Class'が私のコードでは、別のインターフェースに固有のことができないのでしょうか?私は正しいのですか?なぜなら、私が別のものを置くと、ちょうどエラーが出るからです。 – djblois

+0

_ "なぜ私が理解しているのは、どこのTentity:私のコードのクラスでは、別のインターフェースから生まれるものではありませんか?取得しているエラーメッセージのテキストをスタックオーバーフローで検索すると、それを実現する方法がわかります(ヒント:ジェネリック制約)。 –

答えて

0

あなたはおそらく複数の小さなインターフェースにIRepositoryBaseを分離できました。たとえば、次を持つことができます: - :void Dispose();メンバーが原因IDisposableインタフェースのほかの消えた

public interface IRepositoryReadOnly<TEntity> : IDisposable where TEntity : class 
{ 
    IQueryable<TEntity> GetAll(); 
    IQueryable<TEntity> GetAll(object filter); 
    TEntity GetById(object id); 
    TEntity GetFullObject(object id); 
    IQueryable<TEntity> GetPaged(int top = 20, int skip = 0, object orderBy = null, object filter = null); 
} 

public interface IRepository<TEntity> : IRepositoryReadOnly<TEntity> where TEntity : class 
{ 
    void Delete(object id); 
    void Delete(TEntity entity); 

    void Insert(TEntity entity); 
    void Update(TEntity entity); 

    void Commit(); 
} 

public interface UnitOfWork<TEntity> : IDisposable 
    where TEntity : class 
{ 
    void Commit(); 
} 

public interface IDeletableRepositoryBase<TEntity> : IDisposable 
    where TEntity : class 
{ 
    void Delete(object id); 
    void Delete(TEntity entity); 
} 

public interface IGetRepositoryBase<TEntity> : IDisposable 
    where TEntity : class 
{ 
    IQueryable<TEntity> GetAll(); 
    IQueryable<TEntity> GetAll(object filter); 
    TEntity GetById(object id); 
    TEntity GetFullObject(object id); 
    IQueryable<TEntity> GetPaged(int top = 20, int skip = 0, object orderBy = null, object filter = null); 
} 

public interface IUpsertRepositoryBase<TEntity> : IDisposable 
    where TEntity : class 
{ 
    void Insert(TEntity entity); 
    void Update(TEntity entity); 
} 

public interface IThirdWaveRepositoryBase<TEntity> : IDisposable, IGetRepositoryBase<TEntity> 
    where TEntity : class 
{ 

} 
0

を私はこのような何かを示唆しています。

関連する問題