scala - 如何避免无参数案例类?
问题描述
我有以下代码片段,我想改进:
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
吗?
解决方案
案例类应该只用于数据建模,而不是处理。
这将是一种更好的成型方式:
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] = ???
}
}
推荐阅读
- sql-server - 将 XML 列转换为 SQL Server 中的单独列
- ios - 找到满足来自 .symlinks/plugins/firebase_analytics/ios 依赖项的 firebase_analytics 的规范,但需要更高的最小部署目标
- tensorflow - tensorflow_model 服务器在 colab 中不起作用
- android-management-api - 有没有办法将设备从一个企业迁移到另一个企业?
- ruby-on-rails - 了解具有多个数据库的 Rails 6
- reactjs - React 组件导出 (html2canvas) 到 PNG 错过了所有 SVG 图标
- gitlab - GITLAB-CI:更改文件中的版本/写入文件
- python - 如何使用 Python 将多个 BLOB 数据导出到各自的文件名
- android - 在 ViewModel 中存储 GoogleMap
- reactjs - 如何使用 prop-types 在 React 组件中自动完成 props