Slide 14
Slide 14 text
IOを使った実装例
● 定期的にキャッシュを更新する機能(Loaderと呼んでいる)によってDaoからロードしたデータを
Repositoryに反映する
● IOを使うことでロードのタイミングと反映のタイミングを分離
14
class UserLoader(
userDao: UserDao,
ageDao: AgeDao,
userRepository: UserRepository
) {
def load(dependency: Dependency): Either[Throwable, IO[Unit]] = {
for {
r1 <- userDao.find(dependency)
r2 <- ageDao.find(dependency)
state = buildFrom(r1, r2)
} yield IO { userRepository.update(state) }
} toEither
}
class Loader(
userLoader: UserLoader,
hogeLoader: HogeLoader
) {
def load(dependency: Dependency): Either[Throwable, IO[Unit]] = {
for {
userIO <- userLoader.load(dependency)
hogeIO <- hogeLoader.load(dependency)
} yield
userIO append
hogeIO
}
}
LoaderはDaoから取得したデータをRepositoryへ反映する 複数のIOをappendによって一つのIOにまとめていく
言語はScalaです