3

假设我有一个包含内部并发哈希映射的类

final class SomeClass() {
  private val byUserId = new ConcurrentHashMap[User.ID, Vector[User]](64)

  // ...
}

现在,如果我想在我的 API 端点和服务的其他区域中引用这个类,我将如何将它包装在猫 IO/效果中?

由于这已经是管理状态,它仍然是一个效果 IO 吗?

需要一些指导,因为我对 FP 有点困惑和陌生。

4

1 回答 1

2

我想这取决于你将如何使用它。以下是我对此的看法。

因此,您可能希望在不同进程之间共享该类的一个实例(和一个映射),对吗?所以它的实例化应该包裹在 IO 中。然后,您可以将它作为依赖项注入到您需要使用它的所有其他地方。那么这个类的所有与 Map 有任何关系的公共方法也应该返回一个 IO。

final class SomeClass private() {
  private val byUserId = new ConcurrentHashMap[User.ID, Vector[User]](64)

  def getById(id: User.ID): IO[Vector[User]] = ???

  def setUser(id: User.ID, user: Vector[User]): IO[Unit] = ???
}

object SomeClass {
  def apply() = IO(new SomeClass())
}

SomeClass().flatMap { instance =>
  // do stuff with it
  Api(instance)
}
于 2020-08-05T10:18:30.617 回答