我是存储库模式的新手并尝试理解它是如何实现的。例如让我说我有一个类和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方法的新接口?还是有更好的方法。
答案 0 :(得分:0)
您无法有选择地选择要实现的接口部分。您唯一的选择是将这些方法拆分为独立接口,但请记住,在有意义的情况下仍然可以继承接口,例如:
public interface IReadRepository<T>
{
T Get(int id);
}
public interface IWriteRepository<T> : IReadRepository<T>
{
void Add(T entity);
}
这种方式,例如,您的类只能实现IReadRepository,因此只需要实现其中一种方法。
编辑:
你也可以明确地实现接口,然后选择公开可用的方法;但我怀疑你实际上并不想真正实现界面中的所有方法(我测量的实际实现),如果你让它们抛出类似NotImplementedException的东西,会违反Liskov替换原则 ...