谈论接口隔离原则我正在评估我经常在服务层中使用的接口的设计:
public interface ICrudService<D>
{
IList<D> GetAll();
bool Exists(int id);
D GetById(int id);
D NewInstance();
D Create(D dto);
D Update(D dto);
void Delete(int id);
}
我通常使用此接口的抽象实现,并从抽象类继承我的具体服务。
但显然我并不总是需要在我的服务类中使用所有这些方法,所以我想让这个结构更灵活。
一个选项可能是以这种方式拆分我的界面(和我的抽象类):
public interface IGetAllService<D>
{
IList<D> GetAll();
}
public interface IExistsService<D>
{
bool Exists(int id);
}
// etc.
然后在我的具体类中实现所需的方法:
public class ConcreteService : IGetAllService<ConcreteEntity>, IExistsService<ConcreteEntity>
{
// implemented methods
}
但这是好的设计吗?
是否有更好的方法可以使我的应用程序结构更加灵活和可重用?
答案 0 :(得分:2)
您似乎是从一个抽象类派生来继承默认实现。不要滥用继承来重用代码。继承是为了创造可替代性。创建一些帮助方法。这样你就可以只创建你想要公开的方法。