【发布时间】:2016-09-17 12:37:20
【问题描述】:
全部,
我一定是做错了。当时这似乎是一个好主意,但随着我深入研究,我认为有一种更合适的编程方式来处理它。所以我问你...
一个音符。我正在使用 Google AppEngine 和 Datastore 来存储这些信息。
好吧...假设我有一个超级类车辆,然后有 3 个子类...汽车、卡车、摩托车。
在 Super Class 中,有 3 个属性...Manufacturer、Model、Type
例如,这些可能是:
- 制造商:福特
- 型号:Focus
- 类型:汽车
因此,在 Datastore 中,我有许多具有这些属性的 Vehicle 实体。 因此,如果用户想查看所有汽车...我将所有内容都使用“汽车”类型。
如果用户想要将这些车辆之一添加到“收藏夹”列表中,我会根据车辆的类型将车辆对象转换为其特定的子类。然后添加该特定子类的额外属性。
这个新的子实体连同其添加的属性一起存储在数据存储区中。
所以基本上,例如,我从车辆转向汽车。我通过在 Car 类中创建一个额外的构造函数来实现这一点,该构造函数将 Vehicle 作为参数。创建后,Car 对象现在具有所有属性(制造商、模型、类型)集,以及其特定实现附带的所有新属性。
这似乎令人费解且错误。它有效,但必须有更好的方法来做到这一点。
我选择这种方式的主要原因是因为 GAE 数据存储的工作方式。存储超类及其有限属性并查询它们“更便宜”。说来话长。
我正在尝试使用接口和/或抽象类来解决这个问题,但我想获得您的所有输入。
感谢您的帮助。
【问题讨论】:
标签: java google-app-engine inheritance google-cloud-datastore object-composition