1

私のCassandraキースペースには、次のように、メインのオファーテーブルと、同じテーブルのさらに3つのコピーがあり、異なるクエリ引数を対象としています。

offer (primary key offer_id) (... some attributes)
offer_by_product (primary key product_id, offer_id) (... some attributes)
offer_by_seller (primary key seller_id, offer_id) (... some attributes)
offer_by_sku (primary key sku_id, offer_id) (... some attributes)

すべての列はまったく同じで、パーティション キーとクラスタリング キーのみが変更されていますが、Scala+Phantom を使用して 4 つのテーブルすべてに CRUD 操作を実装するには、多くのコードを複製する必要があります。

CRUD 操作のコードの重複や重複の少ない適切な実践なしに、Scala+Phantom を使用してリポジトリを実装する方法はありますか?

4

2 に答える 2

1

まあ、@flavian がすでに言ったように、それはできませんが、少なくともオブジェクトをこのような特性に抽出することはできました。

trait MyCommonModel[O <: CassandraTable[O, R], R] {

  var cassandra: O = _

  object commonField extends StringColumn(cassandra)
  ...

}

次に、モデルで次のように使用できます。

sealed class MyModel extends CassandraTable[MyModel, Model] with MyCommonModel[MyModel, Model]

したがって、CommonModel からすべてのオブジェクトを継承します。

アップデート

ドキュメントに従って、phantom-dsl を使用して scala で cassandra テーブルをモデル化する方法を示す github プロジェクトを作成しました。こちらをご覧ください。

https://github.com/iamthiago/cassandra-phantom

于 2015-07-21T12:26:11.123 に答える