用途
该技能用于为 Kotlin Multiplatform 应用规划一套边界清晰、可验证的分层架构。核心目标是让模块之间的依赖方向可检查,避免共享代码被平台类型或具体实现污染。
主要能力
技能定义了六类模块及其职责与依赖关系:
- :common:常量、日志门面,不依赖任何模块。
- :domain:仓库接口、模型、能力端口,仅依赖 :common。
- :data:仓库实现、数据库、映射器,依赖 :domain、各集成模块,以及各 source set 所需的引擎。
- :<integration>:每个外部服务一个模块,依赖 :domain、:common 和共享 HTTP 模块。
- :<engine>-<platform>:每个平台一个播放/原生引擎,依赖 :domain。
- :app:屏幕、视图模型、容器装配,以 api 方式依赖 :domain,以 implementation 方式依赖 :data。
关键设计点包括::data 到 :<engine>-<platform> 的依赖按 source set 划分而非全局,common source set 只声明集成,各平台 source set 只添加自己的引擎,从而避免一个引擎进入另一平台的编译类路径。:app 对 :domain 使用 api、对 :data 使用 implementation,使容器能构造实现,同时仓库实现声明为 internal,外部无法按名称引用。
每个外部服务独立成模块,其构建文件只命名 :domain、:common 和共享 HTTP 模块,不依赖其他集成或 :data,从而将某个服务响应结构变化的影响限制在单个模块内。
:domain 拥有端口而非仅数据。平台提供的能力在 :domain 中以接口形式定义,并使用 :domain 自有的类型(如 GenericMediaItem),避免引入平台引擎类型。
使用方式
技能提供多组 grep 验证命令,用于确认架构约束是否成立:
- 检查 :data 中仓库实现是否声明为 internal,以及 :app 是否按名称导入仓库实现。
- 检查各服务模块的 build.gradle.kts 是否只依赖 domain、common 或共享 HTTP 模块。
- 检查 :app 的 api/implementation 拆分,以及各平台引擎是否只出现在对应平台块中。
技能还给出检查 :domain 是否包含平台或 UI 导入的命令,并提醒“domain 没有框架注解”是需要测量的断言而非天然属性。
适用场景
适用于采用 Kotlin Multiplatform 构建、需要长期维护模块边界的中大型应用,尤其是涉及多个外部服务集成、多平台原生引擎、以及需要控制变更影响范围的场景。
限制
技能明确指出若干陷阱:仅做转发的层是额外成本;映射应放在 :data 中作为 internal 扩展函数;层间使用 implementation 才能让边界可执行;为对称性创建的模块会消耗构建时间;端口签名中出现平台类型则不再是端口。资料未提供该技能的具体安装命令、收费信息或平台支持范围。