如何为我的服务层设计更灵活的结构

时间:2015-07-31 09:10:40

标签: c# oop solid-principles

谈论接口隔离原则我正在评估我经常在服务层中使用的接口的设计:

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
}

但这是好的设计吗?

是否有更好的方法可以使我的应用程序结构更加灵活和可重用?

1 个答案:

答案 0 :(得分:2)

您似乎是从一个抽象类派生来继承默认实现。不要滥用继承来重用代码。继承是为了创造可替代性。创建一些帮助方法。这样你就可以只创建你想要公开的方法。