在构造中初始化特征字段的正确方法是什么

时间:2013-12-31 18:05:14

标签: scala

我对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层返回的新匿名子类是否仍然适合匹配?

1 个答案:

答案 0 :(得分:1)

这当然有效,但您可能会发现Employee子类DBEntity更清晰。在这种情况下,您可能希望将id字段设为特征def,并使用val类中的Employee覆盖该字段。

无论哪种方式,模式匹配都适用于案例类。