在维基百科上聚合类扩展基类 - 违反LSP?
的Liskov Substitution Principle(LSP)说我有一个Alien
类的numFingers
属性*。偶尔,我需要从数据库中提取numFingers
的总和,并按照其他字段值进行分组。在这些情况下,我不需要单独处理每条记录,但我确实需要访问它们的许多功能 - 能够获取属性,对它们执行一些基本逻辑等。这可能包括从数千记录,所以当数据库查询可以完成对我的求和工作时,实例化数以千计的对象是没有意义的。
我想做一个扩展类叫做AlienAggregate
,它的属性是从分组的&总计查询中设置的。这个班会让我打电话给Alien
的任何方法。 只有这两个类的功能区别,是GetID()
。聚合类没有ID,因为它的数据来源于任意数量的记录。因此,拨打GetID()
AlienAggregate
会引发异常。
这是违反Liskov替代原则吗?有没有更好的方法来处理对GetID()
的呼叫?有没有更好的方法来设计Alien
和AlienAggregate
类之间的关系?
*实际名称可能因为我可以改变。
我想让AlienAggregate扩展Alien,因为我需要两个类中的相同逻辑。 – keithjgrant 2011-01-22 16:09:16