在构造时初始化特征场的正确方法是什么



我对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覆盖它。

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

相关内容

最新更新