假设我有一个包含内部并发哈希映射的类
final class SomeClass() {
private val byUserId = new ConcurrentHashMap[User.ID, Vector[User]](64)
// ...
}
现在,如果我想在我的 API 端点和服务的其他区域中引用这个类,我将如何将它包装在猫 IO/效果中?
由于这已经是管理状态,它仍然是一个效果 IO 吗?
需要一些指导,因为我对 FP 有点困惑和陌生。
假设我有一个包含内部并发哈希映射的类
final class SomeClass() {
private val byUserId = new ConcurrentHashMap[User.ID, Vector[User]](64)
// ...
}
现在,如果我想在我的 API 端点和服务的其他区域中引用这个类,我将如何将它包装在猫 IO/效果中?
由于这已经是管理状态,它仍然是一个效果 IO 吗?
需要一些指导,因为我对 FP 有点困惑和陌生。
我想这取决于你将如何使用它。以下是我对此的看法。
因此,您可能希望在不同进程之间共享该类的一个实例(和一个映射),对吗?所以它的实例化应该包裹在 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)
}