全部,
我必须做错了。当时这似乎是一个好主意,但随着我深入研究,我认为有一种更合适的编程方式来处理它。所以我问你...
一注。我正在使用 Google AppEngine 和 Datastore 来存储这些信息。
好的......假设我有一个超级类车辆,然后有 3 个子类......汽车、卡车、摩托车。
在 Super Class 中,有 3 个属性……Manufacturer、Model、Type
例如,这些可能是:
- 制造商:福特
- 型号:焦点
- 类型:汽车
因此,在 Datastore 中,我有许多具有这些属性的 Vehicle 实体。因此,如果用户想查看所有的汽车......我用“汽车”类型拉所有东西。
如果用户随后想要将这些车辆之一添加到“收藏夹”列表中,那么我将根据车辆对象的类型将车辆对象转换为其特定的子类。然后添加该特定子类的额外属性。
这个新的子实体连同其添加的属性一起存储在数据存储区中。
所以基本上,我正在贬低,例如,从车辆到汽车。我通过在 Car 类中创建一个以 Vehicle 作为参数的额外构造函数来做到这一点。创建后,Car 对象现在具有所有属性(制造商、模型、类型)集,以及其特定实现附带的所有新属性。
这似乎令人费解和错误。它有效,但必须有更好的方法来做到这一点。
我选择这种方式的主要原因是因为 GAE 数据存储的工作方式。存储超类及其有限属性并查询它们“更便宜”。很长的故事。
我正在尝试使用接口和/或抽象类来解决这个问题,但我想获得您的所有输入。
谢谢您的帮助。