About SynthKernel
SynthKernel is a TypeScript software architecture that helps you write efficient, clean and modular code.
Typical practice of SynthKernel consists a module loader class and module classes:
- The module loader class manages module lifecycles, orchestrates types, and behaves as an facade at the surface of your app logic.
- All module classes extend a
BaseModuleclass, they define APIs, execute actual logic, augment the loader class and wire each other via dependency injection. - Types are resolved via generics orchestration.
- Modules are composed to the loader to form an APP. A module loader can also be a module of a parent loader.
- It is applicable to almost all use cases, including but not limited to backend service, complex automation, CLI application, and canvas rendering engine.
File System Conventions
SynthKernel should be structured in a tree pattern.
A loader together with the base module and all its direct modules should be placed flatly in one folder:
- the file accommodating the loader should be named
index.ts - base module named
BaseModule.ts - types named
types.ts - all modules are named
(module name in PascalCase).ts - no restriction to the name of other files
It's a standard practice to turn a over-bloated module into a new loader-module structure, then simply turn the module into a folder with the same requirements above.
When to Use
- At the early stage of development, when you have clues of logic yet haven't written any code.
- You don't have a clear architecture convention.
- During refactors when you aim to split some large modules or make the project modular.
- You are adding new functionalities and considering to make a new module, wanting to understand SynthKernel.
When Not to Use
- You are not supposed to create or change the architecture.
- You are developing web UI which has its own conventions.
- You are serving for a simple project (loc < 200) where a classical monolith is more convenient.
Actions
- If you are implementing SynthKernel from scratch or refactoring existing code to adopt SynthKernel, go to start.
- If you are adding a new module or splitting modules, go to maintenance.
- You can find an example of standard practice in ./example.