如何有选择地只实现接口的一部分

时间:2015-07-04 19:53:44

标签: c# oop architecture repository-pattern

我是存储库模式的新手并尝试理解它是如何实现的。例如让我说我有一个类和2个接口就像这样。 并希望实现某种特定的方法,而不是全部。(在UserRepository上)。

我怎样才能实现这个目标。

public interface IRepository<T>
    {
        #region operations

        List<T>  GetAll();
        void Update(T user);
        void Delete(T user);
        void Add(T user);
        T FindById(int id);
       #endregion

        #region operations async

        List<T> GetAllAsync();
        void UpdateAsync(T user);
        void DeleteAsync(T user);
        void AddAsync(T user);
        T FindByIdAsync(int id);

        #endregion

    }

IUserRepository

 interface IUserRepository
    {
        int GetUserCount();
        int GetUserType();
        int GetUserPaged();
        int GetUserStars();
    }

UserRepository

public class UserRepository:IRepository<User>,IUserRepository
{
    public List<User> GetAllAsync()
    {
        throw new NotImplementedException();
    }

   public int GetUserCount()
   {

       return 1;
   }
}

我是否应该再次创建包含此2方法的新接口?还是有更好的方法。

1 个答案:

答案 0 :(得分:0)

您无法有选择地选择要实现的接口部分。您唯一的选择是将这些方法拆分为独立接口,但请记住,在有意义的情况下仍然可以继承接口,例如:

public interface IReadRepository<T>
{
    T Get(int id);
}

public interface IWriteRepository<T> : IReadRepository<T>
{
    void Add(T entity);
}

这种方式,例如,您的类只能实现IReadRepository,因此只需要实现其中一种方法。

编辑:

你也可以明确地实现接口,然后选择公开可用的方法;但我怀疑你实际上并不想真正实现界面中的所有方法(我测量的实际实现),如果你让它们抛出类似NotImplementedException的东西,会违反Liskov替换原则 ...