我正在为我的play2/slick2项目开发一个抽象的CRUD-DAO.为了拥有方便的类型安全的主要ID我使用Unicorn作为额外的抽象和方便在光头MappedTo和ColumnBaseType.
Unicorn提供了一个基本的CRUD-DAO类BaseIdRepository,我想进一步扩展它以满足项目的特定需求.班级的签名是
class BaseIdRepository[I <: BaseId, A <: WithId[I], T <: IdTable[I, A]]
(tableName: String, val query: TableQuery[T])
(implicit val mapping: BaseColumnType[I])
extends BaseIdQueries[I, A, T]
Run Code Online (Sandbox Code Playgroud)
这导致DAO实现看起来像
class UserDao extends
BaseIdRepository[UserId, User, Users]("USERS", TableQuery[Users])
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎是多余的.我能够提供tableName和query从T我自己的抽象DAO给我以下签名
abstract class AbstractIdDao[I <: BaseId, A <: WithId[I], T <: IdTable[I, A]]
extends BaseIdRepository[I,A,T](TableQuery[T].baseTableRow.tableName, TableQuery[T])
Run Code Online (Sandbox Code Playgroud)
是否有可能在斯卡拉以某种方式推断类型I并A做出类似以下可能的签名?(Users是一个类扩展IdTable)
class UserDao extends AbstractIdDao[Users]
Run Code Online (Sandbox Code Playgroud)
这可能没有运行时反射吗?如果仅通过运行时反射:如何在类定义中使用Manifest以及在响应式应用程序中对性能的影响有多大?
另外,因为我对这门语言还很陌生并独立工作:这是scala中的好习惯吗?
谢谢你的帮助.随意批评我的问题和英语.当然,改进将提交给Unicorn …