首页 > 解决方案 > 如何避免无参数案例类?

问题描述

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

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] = ???

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

标签: scalascala-cats

解决方案


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

这将是一种更好的成型方式:

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] = ???
  }
}

推荐阅读