具有防止交叉实现使用的限制在继承语义上是否有效?

问题描述

想象一个场景,您想要创建一些排名系统,其中底层排名实现是灵活的。

可能有一些排名函数,它接受一个 IRanker 并根据需要在配置的资源上运行该函数。

interface IRanker
{
    double Rank(MyDataItem item);
}

List<double> RunRankingSystem(List<MyDataItem> items,IRanker ranker);

然而,考虑到每个 IRanker 实现的灵活性,它们可能没有可比性。例如,一个 Ranker 可能返回 [0,1] 中的值,而另一个可能返回 [0,inf)。也就是说,在具体类型未知的两个任意 IRanker 实例之间,结果不可比较,但对于一个 IRanker 实例,结果可以进行比较。

从学术的角度来看,我想知道这是否巧妙地打破了真正继承的一些要求,例如类似于 LSP,还是违反了其他一些原则。我正在寻找一些更具体的基础作为理由。

我已经知道这样的设计存在一些可用性问题,因为此要求未强制执行或不明显,但我的问题是禁止比较这些结果的合同是否违反了其他规定,而不仅仅是合同是否违反选择是好的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)