Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 公共案例类变量_Scala_Case Class - Fatal编程技术网

Scala 公共案例类变量

Scala 公共案例类变量,scala,case-class,Scala,Case Class,是否有人有任何想法/更好的方法来处理跨多个案例类的公共字段…例如,我有以下案例类 case class Customer( name: String, refId: String = ReferenceIdGenerator.generateRefId("CUSTOMER"), createdAt: DateTime = DateTime.now, updatedAt: DateTime = DateTime.now, id: Option[Long] =

是否有人有任何想法/更好的方法来处理跨多个案例类的公共字段…例如,我有以下案例类

case class Customer(
    name: String,
    refId: String = ReferenceIdGenerator.generateRefId("CUSTOMER"),
    createdAt: DateTime = DateTime.now,
    updatedAt: DateTime = DateTime.now,
    id: Option[Long] = None)
最后四个变量在我的示例应用程序中的每个“模型/域”案例类中重复。有没有更好的方法来删除常见的样板代码

一种想法是创建一个“公共”案例类,例如,至少样板代码是有限的

case class CommonFields(refId: String...etc)
case class Customer(name: String, common: CommonFields)

想法?

这些常见的想法只是巧合,所以这既不是样板文件,也不是重复的代码

一种想法是创建一个“公共”案例类,例如,至少样板代码是有限的


是的,这是正确的解决方案,假设它与您用来与数据库交互的任何东西都能很好地协同工作。如果您使用的是Slick,请参见。

“在每个XY中重复”听起来不像coincidence@Bergi这听起来是不相关的,不是真的。我要说的是,这里有一个明确的继承案例,或者Scala提供的类似的任何东西(我不是Scala程序员)@LightnessRacesinOrbit您不能继承构造函数参数,所以继承对您没有多大帮助。继承,没有。但这听起来像是合成的经典案例。这将是任何给定字段与其元数据之间的链接。这绝对是一个有效的构造,而不是“巧合”。如果它是常见的,那么你可能可以用在你的领域中有意义的东西来命名它,“CommonFields”并不意味着什么,但AuditData(创建:DateTime,更新:DateTime)可能意味着什么。我支持这种方法,我在过去使用过。如果有一种简单的方法来实现这一点,比如有一个基本构造函数,您可以将它与子类构造函数连接起来,从而仍然向客户机代码提供一个平面接口,那就太好了。这可能在不成形或使用宏时发生;但我从来没做过。