004: Henne oder Ei: Was brauchen wir zuerst?

Mar 21, 2023
54 mins

Episode Description

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“
See all episodes