While building haskcore - an IDE for Haskell on Compose Desktop - I extracted rules that allowed me to create an architecture of 40 isolated modules, where each module knows only what it needs.
That's how FLIP - Feature-Layered Isolated Platform - was born.
The main problem I faced during development: horizontal dependencies make the system fragile . The solution - strict vertical hierarchy.
FLIP consists of the following isolated modules:
:common:core - common logic components.
:common:presentation - common UI components.
:service - UI-less domain module. Provides a service interface.
interface SeedService : AutoCloseable { val seed : Flow < Seed >
suspend fun generateSeed (): Either < Throwable , Unit > }
Enter fullscreen mode
Exit fullscreen mode
:feature:core — logic module of a UI-feature. Knows nothing about other features. Uses services from :service . Provides use cases.
class GenerateRemoteRandomSeed ( private val seedService : SeedService ) : UseCase .…