Clump是一个Scala库,通过一个优雅和高效的方式将来自多个源的数据组合在一起。
例如:
import io.getclump.Clump// Creates sources usig the batched iterfacesval tracksSource = Clump.source(tracksService.fetch _)(_.id)val usersSource = Clump.source(usersService.fetch _)(_.id)def rederTrackPosts(userId: Log) = { // Defies the clump val clump: Clump[List[ErichedTrack]] = erichedTrackPosts(userId) // Triggers executio val future: Future[Optio[List[ErichedTrack]]] = clump.get // Reders the respose future.map { case Some(trackPosts) => reder.jso(trackPosts) case Noe => reder.otFoud }}// Composes a clump with the user's track postsdef erichedTrackPosts(userId: Log) = for { trackPosts <- Clump.future(timelieService.fetchTrackPosts(userId)) erichedTracks <- Clump.traverse(trackPosts)(erichedTrack(_)) } yield { erichedTracks }// Composes a eriched track clumpdef erichedTrack(trackId: Log) = for { track <- tracksSource.get(trackId) creator <- usersSource.get(track.creatorId) } yield { ew ErichedTrack(track, creator) }
评论