Menu

1 / 2

A recipe for the Perfect Use Case

DEV Community·numq·6 months ago
#aVldHY26
#kotlin#architecture#cqrs#cleancode#usecase
Reading 0:00
15s threshold

Today we’re cooking the perfect Use Case — and CQRS will be our recipe.

Ingredients

Action — fire and forget (logout, clear cache)

Query — read data (list products)

Command — write data (update profile)

Exchange — transform data (login)

All four types extend a sealed interface:

sealed interface UseCase < Input , Output > { class Action : UseCase < Unit , Unit >

class Query < Output > : UseCase < Unit , Output >

class Command < Input > : UseCase < Input , Unit >

class Exchange < Input , Output > : UseCase < Input , Output > }

Enter fullscreen mode

Exit fullscreen mode

Three Ways to Season It

Arrow (Typed Errors) — the chef’s choice:

class GenerateSeed ( private val seedService : SeedService ) : UseCase . Action { override suspend fun Raise < Throwable >. action () = seedService . generateSeed (). bind () }

Enter fullscreen mode

Exit fullscreen mode

Result (Standard Wrapper) — zero dependencies:

class GenerateSeed ( private val service : SeedService ) : UseCase .…

Continue reading — create a free account

Join HashtagPLUS to read full articles, follow hashtags, vote, and join the conversation.