维基百科上的里氏替换原则(LSP)
假设我有一个Alien
带有numFingers
属性*的类。有时,我需要numFingers
从数据库中提取按其他字段值分组的总和。在这些情况下,我不需要单独操作每条记录,但我确实需要访问它们的许多功能——能够获取属性、对它们执行一些基本逻辑等。这可能包括从数千个记录中汇总的数据记录,因此Alien
当数据库查询可以为我完成求和工作时,实例化数千个对象几乎没有意义。
我想创建一个名为 的扩展类AlienAggregate
,其属性是从分组和求和查询中设置的。这个类将允许我调用任何Alien
方法。这两个类的功能之间的唯一区别是GetID()
. 聚合类没有 ID,因为它的数据来源于任意数量的记录。因此,调用GetID()
onAlienAggregate
会引发异常。
这是否违反了 Liskov 替换原则?有没有更好的方法来处理呼叫GetID()
?Alien
有没有更好的方法来设计和类之间的关系AlienAggregate
?
*实际名称可能已更改,只是因为我可以。