问题描述
想象一个场景,您想要创建一些排名系统,其中底层排名实现是灵活的。
可能有一些排名函数,它接受一个 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 (将#修改为@)