如何避免无参数案例类?

zer*_*ing 1 scala scala-cats

我有以下代码片段,我想改进:

final case class GenderOps[F[_]]()
                                (implicit xa: Transactor[F],
                                 ev: Bracket[F, Throwable]) extends GenderDb[F] {
  override def create: F[Int] =
    sql"""
    CREATE TABLE interests
    (
      id smallserial NOT NULL,
      interest character varying(40) NOT NULL,
      PRIMARY KEY (id)
    )
    """.update.run.transact(xa)

  override def seed[L[_] : Foldable](v: L[Gender]): F[Int] = ???
Run Code Online (Sandbox Code Playgroud)

正如您在代码中看到的,case class参数为空。可以避免case class吗?

Lui*_*rez 7

一个案例类应该只用于数据建模,而不是处理。

这将是一个更好的方法来塑造这个:

sealed trait GenderDb[F[_]] {
  def create: F[Int]

  def seed[L[_] : Foldable](v: L[Gender]): F[Int]
}

object GenderDb {
  def apply[F[_]](implicit xa: Transactor[F], ev: Bracket[F, Throwable]): GenderDb[F] = new GenderDb[F] {
    override def create: F[Int] =
      sql"""
      CREATE TABLE interests
      (
        id smallserial NOT NULL,
        interest character varying(40) NOT NULL,
        PRIMARY KEY (id)
      )
      """.update.run.transact(xa)

    override def seed[L[_] : Foldable](v: L[Gender]): F[Int] = ???
  }
}
Run Code Online (Sandbox Code Playgroud)