Насмешливые Kotlin приемники - PullRequest
0 голосов
/ 04 марта 2020

Мне было интересно - как лучше издеваться над приемниками Kotlin? Говоря более конкретно, допустим, я определил следующие интерфейсы:

interface TransactionalRepository {

    fun <T> withTransaction(TransactionalOperations.() -> T)
}

interface TransactionalOperations {

    fun <T: Entity> save(entity: T)

    fun <T: Entity> load(id: UUID): T
}

Предполагая, что у меня есть бизнес-логика c, использующая реализацию TransactionalRepository, подобную этой:

fun decrementCounter(counterId: UUID) {
    repository.transaction {
        val entity: Counter = load(counterId)
        entity.decrement()
        save(entity)
    }
}

Как лучше всего высмеивать взаимодействия между TransactionalRepository и TransactionalOperations?

...