Skip to content
Bitzsoft.Integrationsbitzsoft.integrations

Reference

ADR-0001:Sms 为何是单体包而非三层

Sms 域保持单体包不拆分为三层的设计决策。

Last updated
  • 状态:已接受
  • 日期:2025(初始提交时)

背景

Sms 是本库最早成熟的域。最初设计时,所有短信供应商(阿里云、腾讯云、华为云、云片、Twilio、Vonage)被放在同一个包 Bitzsoft.Integrations.Sms 内,以子命名空间(Bitzsoft.Integrations.Sms.Aliyun 等)区分。

后来其他域(Payment、FileStorage、Express 等)确立了”抽象包 / 厂商包 / 聚合包”的三层分离模式,消费者可以只安装需要的那一家厂商。但 Sms 没有跟进。

决策

保持 Sms 为单体包,不拆分为三层。

理由

  1. 破坏性变更代价高:Sms 被广泛引用。拆包意味着消费者的包引用路径从 Bitzsoft.Integrations.Sms 变成 Bitzsoft.Integrations.Sms.Aliyun,是破坏性变更。
  2. 收益有限:单体包的代价是消费者安装时会带入全部 6 家供应商的代码,但这些代码量不大(每家只有 Options + Service),且依赖的厂商 SDK 已经按需引用。
  3. 当前优先级低:在 1.0.0 阶段,拆 Sms 不是优先事项。

后果

  • Sms 是全库唯一不遵循三层约定的成熟域,新人在阅读时可能困惑。
  • Sms 的 DI 扩展方法命名风格(AddAliyunSms,不带 Bitzsoft 前缀)也与其他域(AddBitzsoftAlipayPayment)不一致。
  • Sms 用 AddTransient 注册而非推荐的方式。
  • Sms 没有 .All 聚合包,无需配置存在性驱动的注册——消费者直接调 AddXxxSms()
  • 如果未来决定拆包,应在 2.0 主版本进行,并提供迁移指南。

相关

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%