Jascha Smacka
06/18/2021, 2:28 PMraulraja
06/20/2021, 9:16 AMOliver Eisenbarth
06/20/2021, 11:42 AMsimon.vergauwen
06/20/2021, 3:58 PMsimon.vergauwen
06/20/2021, 4:00 PMsimon.vergauwen
06/20/2021, 4:00 PMOliver Eisenbarth
06/20/2021, 5:20 PMOliver Eisenbarth
06/20/2021, 5:26 PMsimon.vergauwen
06/20/2021, 9:21 PMsimon.vergauwen
06/20/2021, 9:21 PMOliver Eisenbarth
06/29/2021, 7:29 PMsimon.vergauwen
06/30/2021, 7:06 AMOliver Eisenbarth
07/01/2021, 7:33 PMfun mockDataLayer() : DataLayer = object : DataLayer { ... }
simon.vergauwen
07/06/2021, 4:05 PMsuspend fun <R> R.processUser(userId: Long): Unit
where R : Persistence<User>,
R : Repo<User>,
R : Logger,
R : Config,
R : Processor<User> /*, R : ... */ {
val user = userForId(userId)
log("user for id: $user")
val info = fetchInfoForUser(user)
process(config, user, info)
}
So to satisfies this you need a larger composition of interfaces, which is often referred to as "god-class" or "god-dependency".
This is not actually an issue for this style of programming because the function and the "god-class" are completely decoupled and completely unaware of each other. Meaning that it automatically is also 100% testable with whatever techniques you prefer.Oliver Eisenbarth
07/07/2021, 5:33 PMOliver Eisenbarth
07/11/2021, 6:01 PMraulraja
07/11/2021, 6:24 PM(A) -> B
is fun A.whatever(): B
Kleisli : (A) -> F<B>
is suspend fun A.whatever() : B
Oliver Eisenbarth
07/11/2021, 6:30 PMOliver Eisenbarth
07/11/2021, 7:18 PM