我对Scala比较陌生,我正在尝试为一个业余爱好项目编写一些基本的对象关系映射。我有代表我的应用程序域对象的类,例如:
class Employee(val name:String)
我希望我的ORM层能够记录该员工的数据库密钥,但这不应该使公共Employee类混乱。我以为我可以使用这个特性:
trait DBEntity {val id:Int}
在我的ORM层中,当查询员工时,我会返回:
new Employee("Bob") with DBEntity {val id=5}
这将允许我的ORM层稍后检索员工的ID。我的问题是:
1)这是混合特性的最佳方式吗?它归结为创建一个内联匿名类,我更喜欢像new Employee("Bob") with DBEntity(5)
这样的东西,但是traits不能有构造函数参数,所以这不会编译。
2)我正在考虑让Employee成为一个案例类以便以后帮助匹配,ORM层返回的新匿名子类是否仍然适合匹配?
答案 0 :(得分:1)
这当然有效,但您可能会发现Employee
子类DBEntity
更清晰。在这种情况下,您可能希望将id
字段设为特征def
,并使用val
类中的Employee
覆盖该字段。
无论哪种方式,模式匹配都适用于案例类。