You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多项目公共代码抽离时改造Foo接口迁移ContractFoo方案咨询

解决方案

核心思路是给ContractFoo增加泛型参数,解除它和业务侧特定Foo接口的强绑定,即可将无业务依赖的泛型版本迁移到公共库中。


步骤1:定义公共库中的泛型ContractFoo

在Project Common中定义泛型接口,不需要依赖任何Project A、B的业务类型:

interface ContractFoo<T> {
  fun screen(to: T.() -> Unit)
}

步骤2:业务项目绑定本地Foo类型

Project A、B各自绑定泛型参数到本地的Foo接口即可,原有Foo接口不需要做任何修改,业务侧调用逻辑也基本不需要调整:

Project A侧适配代码

// 原有Foo接口保持不变
interface Foo {
    fun screen1InProjectA()
    fun screen2InProjectA()
}

// 用类型别名绑定泛型,兼容原有调用逻辑
typealias ContractFoo = ContractFoo<Foo>

Project B侧适配代码

// 原有Foo接口保持不变
interface Foo {
    fun screen1InProjectB()
    fun screen2InProjectB()
}

// 同理绑定本地Foo类型
typealias ContractFoo = ContractFoo<Foo>

可选优化:增加泛型上界做统一约束

如果后续两个Foo接口有可抽离的公共方法,可以先在Project Common中定义基础父接口,再给ContractFoo的泛型加上界:

// Common中定义公共父接口
interface BaseFoo {
  // 两个Foo共有的方法可以抽离到此处
}

// 给泛型加上界约束
interface ContractFoo<T : BaseFoo> {
  fun screen(to: T.() -> Unit)
}

之后Project A、B的Foo接口继承BaseFoo即可,可进一步规范业务侧的类型定义。


该方案完全符合依赖倒置原则,公共库不需要依赖上层业务项目,同时支持后续其他业务项目复用ContractFoo,只需绑定自身的业务类型即可,扩展性极强。

内容的提问来源于stack exchange,提问作者Praveen P.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:57:01