Benjamin und Sven unterhalten sich über die alltäglichen Herausforderungen während der Entwicklung eines Produkts, das von Grund auf entsteht.
Die Herausforderungen dabei:
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
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