如何使用shapeless将存储库客户端抽象为通用存储库模块

问题描述 投票:0回答:1

我正在尝试编写一个通用的存储库模块,该模块可以处理不同数量的密钥

  trait Repo[K, V] {
    def read(key: K): V
  }
trait DynamoDBRepo extends Repo[K,V]{

def aRepo[K:StringIdentifiable,V]() = new Repo[K,V]{

  val dynamoDBClient = ???

  override def read(key: K, tableName: String): V =  { 

  val tableKey: String = implicitly[StringIdentifiable].identify(key)

  dynamoDBClient.Table(tableName).get(tableKey)  //(*)
 }  
}

}

@typeclass trait StringIdentifiable[M] {
  def identify(id: M): String
}

(*)但是,dynamoDBClient.Table(tableName).get(key)也可以将take a tuple作为键(分区键和排序键)。

因此,我想以某种方式从K中提取String或从key:K override def read(key: K)中从(K,K)中提取(String,String)。

我首先尝试this从实现StringIdentifiable类型类的元组中提取类型。我被卡住了。

Then tried to rewrite一个StringIdentifiable类型的类,当参数是一个键时将返回String,而当读取的参数是一个元组时将返回(String,String)。但是我无法to use this method either

我该如何解决他的问题而又不失去抽象性

[我正在尝试编写一个通用的存储库模块,该模块可以处理不同数量的键。性状Repo [K,V] {def read(key:K):V}性状DynamoDBRepo扩展了Repo [K,V] {def aRepo [K:...

scala typeclass shapeless path-dependent-type
1个回答
0
投票

如果问题的要求是您解决方案必须满足的所有要求,那么就根本不需要无变形的依赖于路径的类型和类型类。

© www.soinside.com 2019 - 2024. All rights reserved.