此设计是否违反了Liskov替代原则?

时间:2020-07-21 12:18:37

标签: oop liskov-substitution-principle

我有一个接口Thing,该接口可以由通过插件系统提供的其他接口继承(换句话说,我无法维护派生接口的代码)。另外,我还有一个接口ThingSaver,用于保存Thing(例如在DB中)。

interface Thing {
    String getInfo1();
    int getInfo2();
}

interface ThingSaver {
    void save(Thing thing);
}

但是插件的接口能够将新信息添加到Thing中,例如:

interface CustomThing extends Thing {
    double getInfo3();
}

因此,他们也需要保存此新信息(例如,在DB的单独表中)。因此,要实现这些插件添加自己的API来保存CustomThing

interface CustomThingSaver extends ThingSaver {//it must not inherit `ThingSaver` but let's suppose it must to
    void save(CustomThing customThing);
}

此API必须用于保存CustomThing。但是不是LSP违规,我们不能仅通过将CustomThing传递给ThingsSaver来保存所有信息(如果我们将CustomThing传递给通常的{{1 }}仅保存常规信息?

0 个答案:

没有答案
相关问题