用途:为 Effect 应用建立依赖注入边界,或在测试/生产实现之间切换,并把日志、数据库、HTTP 等基础设施一次性组合到应用中。
主要能力:使用 Effect.Service 定义服务接口,例如 class UserRepo extends Effect.Service<UserRepo>()("UserRepo", { sync: () => ({ find: (id: string) => Effect.succeed({ id }) }) }) {};通过 Effect.provide(UserRepo.Default) 提供层;用 Layer.merge(UserRepo.Default, Logger.Default) 组合多个层;按环境选择实现,如 const layer = process.env.NODE_ENV === "test" ? UserRepoTest : UserRepo.Default。
使用方式:在应用边界组合层,保持处理函数不感知装配细节;优先用 .Default 快速搭建 live/test 配置,需要时添加自定义层。实现前应在本地 Effect 源码 docs/effect-source/ 中检索真实实现(如 docs/effect-source/effect/src/Layer.ts、Effect.ts、Context.ts,以及 test/Layer.test.ts),可用 grep -F "Layer.merge" 等命令查找组合模式,以真实源码为准。
限制与注意事项:层依赖成环时需拆分模块并从上层提供;层提供位置过深会难以维护,应集中组合;资料未提供收费、价格或平台信息。