【发布时间】:2016-07-15 01:46:26
【问题描述】:
我有 2 个数据结构 itemDto 和 itemEntity,它们看起来像这样。
trait ItemDto{
def id: Long
def name: String
}
trait ItemEntity {
def id: Long
def name: String
}
case class Entity(id: Long, name: String) extends ItemEntity
case class Dto(id: Long, name: String) extends ItemDto
我想建立一个像这样的管道
ItemDto => ItemEntity => ItemEntity => Future[ItemEntity] => Future[ItemEntity] => Future[ItemDto]
我也有一些映射器函数
object ItemMapper {
def mapDtoToEntity(dto: ItemDto): ItemEntity = {
Entity(dto.id, dto.name)
}
def mapEntityToDto(entity: ItemEntity): ItemDto = {
Dto(entity.id, entity.name)
}
}
增加实体id的函数
object ItemEntity{
def incrementId(entity: ItemEntity) = Entity(entity.id + 1, entity.name)
}
并且有一个存储库来保存实体
object ItemRepository {
def save(entity: ItemEntity): Future[ItemEntity] = {
Future{entity}
}
}
最后我的方法结合了所有这些功能来做某事看起来像这样
import ItemMapper._
import ItemRepository.save
import ItemEntity.incrementId
def addItem(dto: ItemDto) = {
(mapDtoToEntity _ >>> incrementId >>> save >>> {_ map (incrementId _ >>> mapEntityToDto) })(dto)
}
在链中调用了save方法后,我不得不闯入另一个函数。我的问题是,有没有办法将未来的价值提升并放回原处,使我的管道看起来像这样?
(mapDtoToEntity _ >>> incrementId >>> save ?!? incrementId ?!? mapEntityToDto)(dto)
?!? 是假设的运算符。
它也可能来自 scala 库。它不需要来自 scalaz。
【问题讨论】: