在c#中使用基本接口有什么好处

本文关键字:接口 什么 | 更新日期: 2023-09-27 18:30:08

我正在使用一个应用程序,其中创建了如下所示的Base接口

public interface IBaseRepository : IDisposable
{
    bool IsUnitOfWork { get; set; }
    void SaveChanges();
}

然后其他接口将此接口扩展为

public interface ICourseRepository : IBaseRepository
{
    Course GetCourseById(int id);
    List<Course> GetCourses();
    CourseModule GetCourseModuleById(int id);
}

只是想知道这种方法的优点是什么

在c#中使用基本接口有什么好处

基本存储库允许您指定希望所有存储库合约具有的行为,而无需在您创建的每个IMyEntityRepository中重复它。

更有趣的是实现这样的基本存储库,并为通用操作指定通用代码:

public abstract class BaseRepository<TEntity> : IRepository<TEntity> where TEntity : class {
    private DbContext _context;
    public Repository(DbContext context) {
        if (context == null) {
            throw new ArgumentNullException("context");
        }
        _context = context;
    }
    protected DbContext DbContext { get { return _context; } }
    public void Create(TEntity entity) {
        if (entity == null) {
            throw new ArgumentNullException("entity");
        }
        DbContext.Set<TEntity>().Add(entity);
        DbContext.SaveChanges();
    }
    public TEntity GetById(int id) {
        return DbContext.Set<TEntity>().Find(id);
    }
    public void Delete(TEntity entity) {
        if (entity == null) {
            throw new ArgumentNullException("entity");
        }
        DbContext.Set<TEntity>().Attach(entity);
        DbContext.Set<TEntity>().Remove(entity);
        DbContext.SaveChanges();
    }
    public void Update(TEntity entity) {
        if (entity == null) {
            throw new ArgumentNullException("entity");
        }
        DbContext.Set<TEntity>().Attach(entity);
        DbContext.Entry(entity).State = EntityState.Modified;
        DbContext.SaveChanges();
    }

等等。,然后让MyEntityRepory扩展BaseRepository

您可以为多个类/接口重用基本接口,而不需要实现其他接口-因此,您可以在一堆类上使用IsUnitOfWork,而无需在所有这些类上实现GetCourseById。但是,您也可以确保所有的CourseRepository都被视为工作单元。