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)可能意味着什么。我支持这种方法,我在过去使用过。如果有一种简单的方法来实现这一点,比如有一个基本构造函数,您可以将它与子类构造函数连接起来,从而仍然向客户机代码提供一个平面接口,那就太好了。这可能在不成形或使用宏时发生;但我从来没做过。