004: Henne oder Ei: Was brauchen wir zuerst?


Episode Artwork
1.0x
0% played 00:00 00:00
Mar 21 2023 54 mins  
Benjamin und Sven unterhalten sich über die alltäglichen Herausforderungen während der Entwicklung eines Produkts, das von Grund auf entsteht.

Die Herausforderungen dabei:
  • Wo sollen wir starten?
  • Fehlende Frameworks und Grundlagen für Datenbankzugriffe, Validierung und Fehlerbehandlung
  • Aufbaue einer Code- und Package-Struktur
  • Anbindung an externe Dienste wie Datenbanken, Message-Broker und Mail-Server
Wie gewohnt schweifen wir dabei ab und reden über
  • Type-driven Development
  • Funktionale Fehlerbehandlung
  • ktor-Module
  • DAO-Schnitte
Unter Berücksichtigung all dieser Herausforderungen fragen wir uns, ob die Umsetzung der fachlichen Funktionalität als Self-contained-System wirklich eine gute Idee war.

Bei der Erkenntnis der Woche gibt's (mal wieder) ein Loblied von Benjamin auf jOOQ (und nein: Wir werden nicht dafür bezahlt).

Code-Beispiel zum funktionalen Fehlerhandling mit either und bind
fun readTeams(): Either<Throwable, List<Team>> { ... }

fun readUsers(): Either<Throwable, List<User>> { ... }

fun assignUserToTeam(user: User, team: Team): Either<Throwable, Unit> { ... }

suspend fun addAllUsersToAllTeams(): Either<Throwable, Unit> =
either {
val teams = readTeams().bind()
val users = readUsers().bind()
teams.forEach { team ->
users.forEach { user ->
assignUserToTeam(user, team).bind()
}
}
}

Links
  • Arrow: „Functional companion to Kotlin's Standard Library“
  • jOOQ: „Build type save SQL queries through a fluent API“
  • valiktor: „Type-safe, powerful and extensible fluent DSL to validate objects in Kotlin“