Scala - 具有大量字段的域对象
Posted
技术标签:
【中文标题】Scala - 具有大量字段的域对象【英文标题】:Scala - Domain Objects with lots of fields 【发布时间】:2018-07-29 02:06:53 【问题描述】:这可能是一个愚蠢的问题,但我对 Scala 比较陌生,所以请多多包涵。我正在尝试为 Scala 中的 Spark 作业建模域对象,它反映了源记录的数据结构并包含 100 多个字段。我正在尝试找出最好的建模方法,因为我不喜欢简单地将所有字段添加到单个案例类中。我曾考虑将密切相关的字段分组到嵌套案例类中,但后来我在一些地方读到不建议使用嵌套案例类。我会很感激一些关于什么是最好的方法的意见。
编辑:回应 Alvaro 的 cmets:
所以本质上我们是说不推荐这样做:
case class Product(name: String,
desc: String,
productGroup: String)
case class ProductPack(packType: String,
packQuantity: Int,
packQuantityUnit: String,
packUnitPrice: Float)
虽然这样很好:
case class Product(name: String,
desc: String,
productGroup: String,
productPack: ProductPack)
case class ProductPack(packType: String,
packQuantity: Int,
packQuantityUnit: String,
packUnitPrice: Float)
【问题讨论】:
您从哪里了解到不推荐使用嵌套案例类? 这是我读到的地方之一here 该指南不鼓励在其他案例类(嵌套类)中使用案例类的定义。但是拥有一个案例类的属性 reference 其他案例类(在类之外定义)很好。 如果您提供一些实际代码,也许是一个具有多个属性的类,我们可能会提供更多相关帮助。 如果您需要在单个案例类中添加超过 22 个字段,请阅读:underscore.io/blog/posts/2016/10/11/twenty-two.html 【参考方案1】:您的更新是正确的。
另一种选择:如果案例类主要在另一个概念的上下文中有意义,有时我会在该概念的伴侣中定义案例类:
case class Product(
name: String,
desc: String,
productGroup: String
productPack: Product.Pack
)
object Product
case class Pack(
packType: String,
packQuantity: Int,
packQuantityUnit: String,
packUnitPrice: Float
)
那也应该没问题。该类包含在一个对象中,但它没有“嵌套”在Product
类中。
【讨论】:
感谢您的意见。伴随对象中的案例类看起来更干净以上是关于Scala - 具有大量字段的域对象的主要内容,如果未能解决你的问题,请参考以下文章