Assembly DSL

Assembly package는 application module 위에 얹힌 ergonomic layer다. typed module model은 그대로 유지하되, blueprint mount, provider derivation, entry descriptor 생성을 더 짧은 surface로 제공한다.

현재 표면

현재 Mounting 스타일

import cats.data.{EitherT, Kleisli}
import cats.effect.IO
import org.sigilaris.core.application.feature.accounts.module.AccountsBP
import org.sigilaris.core.application.feature.group.module.GroupsBP
import org.sigilaris.core.assembly.BlueprintDsl.*
import org.sigilaris.core.assembly.TablesProviderOps.*
import org.sigilaris.core.merkle.{MerkleTrie, MerkleTrieNode}

given MerkleTrie.NodeStore[IO] = Kleisli: (_: MerkleTrieNode.MerkleHash) =>
  EitherT.rightT[IO, String](None)

val accountsModule = mount("accounts" -> AccountsBP[IO])
val accountsProvider = accountsModule.toTablesProvider
val groupsModule = mount("groups" -> GroupsBP[IO](accountsProvider))

DSL이 추가하는 것

Reducer/module type을 더 직접적으로 제어해야 하면 애플리케이션 모듈로 내려가면 된다. Assembly layer는 helper이지 별도의 runtime model이 아니다.

현재 Baseline

관련 페이지