私は Scala にかなり慣れていないので、API ライブラリを作成し、val と不変オブジェクト (可能な場合) のみを使用しようとしています。オブジェクトをモデル化する正しい方法を決定しようとしています。いくつかの「Post」オブジェクトがあり、すべてがいくつかの共通フィールドを共有し、それぞれが独自の特定のフィールドを追加するとします。
abstract class Post(val id: Int, val name: String, ...)
case class TextPost(val id: Int, val name: String, ..., val text: String) extends Post(id, name, ...)
case class PhotoPost(val id: Int, val name: String, ..., val url: String) extends Post(id, name, ...)
このメソッドは、多くの反復的な宣言とボイラープレート コードを追加します。特に、抽象クラスで宣言する多数の Post サブクラスと共有フィールドを処理する場合です。私の見方では、これは、コンストラクターによってのみ初期化できる vals の使用が原因です。ここで詳述されている関係を作成するためのより良い方法はありますか、それとも不変オブジェクトのみを使用したいためにこれに苦しむ必要がありますか?