我有一个域对象:
case class User(val id: Long, username: String)
我不想遵循服务存储库方法(就像典型的spring应用程序,其中实体只是数据持有者),我想将与用户相关的功能放入User对象中。
但我不想将User对象与具体的基础结构实现联系起来,所以我想要传递接口(traits)。
我尝试按照以下方式执行此操作:
case class User(val id: Long, val username: String, implicit val userRepository: IUserRepository)
在应用程序(控制器或其他地方)的某个地方,我想注入(使用@Inject())IUserRepsoitory的具体实现,并希望它隐式传递给User的构造函数。
问题1 : case class User(val id:Long,val username:String, implicit val userRepository:IUserRepository ) - 这不起作用,它没有被编译
问题2 : 将基础架构实现与对象域分离是正确的方法吗?他们是最好的做法吗?
感谢。
答案 0 :(得分:1)
整个参数列表是隐式还是非隐式。你正在寻找
case class User(id: Long, username: String)(implicit userRepository: IUserRepository)
在架构上,让用户类知道它自己的存储库听起来是个坏主意。