全て、
私はこれを間違っている必要があります。当時は良いアイデアのように思えましたが、深く掘り下げていくにつれて、より適切なプログラマティックな方法があると思います。そこでお聞きします...
1 つのメモ。この情報を保存するために Google AppEngine とデータストアを使用しています。
わかりました... 車両のスーパー クラスがあり、それには 3 つのサブクラスがあります... 車、トラック、オートバイ。
スーパークラスには、メーカー、モデル、タイプの 3 つのプロパティがあります。
たとえば、次のようになります。
- メーカー: フォード
- モデル: フォーカス
- タイプ: 車
したがって、データストアには、これらのプロパティを持つ多数の Vehicle エンティティがあります。したがって、ユーザーがすべての車を見たい場合は、「車」タイプですべてをプルします。
ユーザーがこれらの車両の 1 つを「お気に入り」リストに追加したい場合は、車両オブジェクトをそのタイプに基づいて特定のサブクラスに変換します。これにより、その特定のサブクラスの追加のプロパティが追加されます。
この新しい子エンティティは、追加されたプロパティとともにデータストアに保存されます。
つまり、基本的には、たとえば、Vehicle から Car にダウンキャストしています。これは、引数として Vehicle を取る Car クラスに追加のコンストラクターを作成することで実現しました。作成されると、Car オブジェクトにはすべてのプロパティ (Manufacturer、Model、Type) が設定され、特定の実装に付属するすべての新しいプロパティが設定されます。
これは複雑で間違っているようです。それは機能しますが、これを行うためのより良い方法が必要です。
この方法を選択した主な理由は、GAE データストアの仕組みにあります。スーパークラスとその制限されたプロパティを保存してそれらをクエリする方が「安価」です。長い話。
このためにインターフェイスや抽象クラスを使用して頭を包み込もうとしていますが、すべての入力を取得したかったのです。
助けてくれてありがとう。