C# 如何处理两个几乎相同的接口?
我有两个接口,有许多相同的方法,它似乎打破了干燥的原则。如果我的接口中没有这些重复的方法,我如何获得它?或者这对接口来说无关紧要 接口1:C# 如何处理两个几乎相同的接口?,c#,interface,C#,Interface,我有两个接口,有许多相同的方法,它似乎打破了干燥的原则。如果我的接口中没有这些重复的方法,我如何获得它?或者这对接口来说无关紧要 接口1: public interface IRepositoryBase<TEntity> where TEntity : class { void Commit(); void Delete(object id); void Delete(TEntity entity); void Dispose(); IQue
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);
}
公共接口IRepositoryBase,其中tenty:class
{
无效提交();
作废删除(对象id);
无效删除(潜在实体);
无效处置();
IQueryable GetAll();
IQueryable GetAll(对象过滤器);
TEntity GetById(对象id);
TEntity GetFullObject(对象id);
IQueryable GetPaged(int-top=20,int-skip=0,object-orderBy=null,object-filter=null);
无效插入(TEntity实体);
无效更新(潜在实体);
}
接口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);
}
公共接口ITIRDWaveRepositoryBase,其中tenty:class
{
IQueryable GetAll();
IQueryable GetAll(对象过滤器);
TEntity GetById(对象id);
TEntity GetFullObject(对象id);
IQueryable GetPaged(int-top=20,int-skip=0,object-orderBy=null,object-filter=null);
}
您或许可以将IRepositoryBase分离为多个较小的接口。例如,您可以拥有以下内容:-
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
{
}
公共接口工作单元:IDisposable
地点:班级
{
无效提交();
}
公共接口IDeletableRepositoryBase:IDisposable
地点:班级
{
作废删除(对象id);
无效删除(潜在实体);
}
公共接口IGetRepositoryBase:IDisposable
地点:班级
{
IQueryable GetAll();
IQueryable GetAll(对象过滤器);
TEntity GetById(对象id);
TEntity GetFullObject(对象id);
IQueryable GetPaged(int-top=20,int-skip=0,object-orderBy=null,object-filter=null);
}
公共接口IUpsertRepositoryBase:IDisposable
地点:班级
{
无效插入(TEntity实体);
无效更新(潜在实体);
}
公共接口ITIRDWaveRepositoryBase:IDisposable,IGetRepositoryBase
地点:班级
{
}
我建议如下:
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();
}
公共接口IRepositoryReadOnly:IDisposable其中tenty:class
{
IQueryable GetAll();
IQueryable GetAll(对象过滤器);
TEntity GetById(对象id);
TEntity GetFullObject(对象id);
IQueryable GetPaged(int-top=20,int-skip=0,object-orderBy=null,object-filter=null);
}
公共接口IRepository:IRepositoryReadOnly其中tenty:class
{
作废删除(对象id);
无效删除(潜在实体);
无效插入(TEntity实体);
无效更新(潜在实体);
无效提交();
}
void Dispose()代码>成员已消失,因为添加了IDisposable
接口。为什么第一个接口不能继承(扩展)第二个接口?你试过什么?你到底不明白什么?@PeterDuniho,我只是在学习接口。现在我只是使用它们,因为我在视频中被告知要使用它们。我试图完全理解他们。从我对代码中tenty:Class的理解来看,我不能从另一个接口中固有?我说的不对吗?因为如果我加上另一个:我只是得到一个错误“根据我的理解,因为我的代码中的tenty:Class,那么我不能从另一个接口中固有?我不对吗?”--你不对。如果您在堆栈溢出中搜索您收到的错误消息文本,您可能会找到如何完成此操作(提示:通用约束)。虽然存在重复,但我不一定要应用DRY,因为这也会给您带来麻烦。我会保持原样,如果它再次出现在另一个界面上,我会考虑你的设计。分解它的一种方法是只在一个接口中指向公共部分,并在类中实现这两个部分。这并不是说你不能,但它会带来一些无法避免的不一致性。