بله درست میفرمائید .
منتها پیاده سازی الگوی Repository فریم ورک Abp پر است از ترکیب استفاده از Interface و Abstract !
در نظر بگیرید اگر بخواهیم رویکردی داشته باشیم تا از این الگو در انواع Ormها و یا انواع دیتابیسها استفاده کنیم استفاده از این رویکرد درست نیست؟
سناریوی زیر رو در نظر بگیرید :
public interface IRepositoryBase<TEntity> : IReadOnlyRepositoryBase<TEntity>
where TEntity : class, IEntity
{
Task<TEntity> InsertAsync([NotNull] TEntity entity);
Task InsertManyAsync([NotNull] IEnumerable<TEntity> entities);
Task<TEntity> UpdateAsync([NotNull] TEntity entity);
Task UpdateManyAsync([NotNull] IEnumerable<TEntity> entities);
// Todo InsertOrUpdate(TEntity entity);
Task DeleteAsync([NotNull] TEntity entity);
Task DeleteManyAsync([NotNull] IEnumerable<TEntity> entities);
}
public interface IRepositoryBase<TEntity, TKey> : IRepositoryBase<TEntity>, IReadOnlyRepositoryBase<TEntity, TKey>
where TEntity : class, IEntity<TKey>
{
Task DeleteAsync(TKey id); //TODO: Return true if deleted
Task DeleteManyAsync([NotNull] IEnumerable<TKey> ids);
}
مثلا در لایه MyFrameWork.Infratructure.EfCore یه پیاده سازی پیش فرض از این اینترفیسها در کلاس abstract EfCoreRepositoryBase داشته باشیم تا نخواهیم در کلاسهای Repository بیزینس دامین مون هر سری یک سری متدها رو پیاده سازی کنیم ؟ مثلا در IUserRepository