我对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层返回的新匿名子类是否仍然适合匹配?
当然是有效的,但你可能会发现Employee
子类DBEntity
更干净。 在这种情况下,您可能希望使id
字段成为特征中的def
,并使用Employee
类中的val
覆盖它。
无论哪种方式,模式匹配都将适用于案例类。