Platform 工具平台模块
Platform 是模块化单体中的「工具型」子域聚合层。它不承担核心业务,而是把一批彼此独立、却常被业务复用的横切能力聚到一起:待办、短链接、节假日、消息中心,以及热榜、TTS、导航站、加密、IP 查询、服务器监控等。本文讲清这个模块的边界在哪、为什么聚到一起、内部如何划分子域,各子域的用法见下方子页面。
为什么把这类能力聚成一个模块
这些能力的共同点是:不属于任何单一业务域,却哪个业务都可能用到。如果拆成独立微服务,会带来部署、鉴权、事务边界的额外成本,而它们彼此之间几乎不需要跨域事务。把它们作为模块化单体里的一个 IModuleStartup 挂载,本质上是用「进程内模块边界」替代「服务边界」——既能整体关闭,又省去远程调用的复杂度。
边界原则:
- 可独立数据源:短链接数据量大且与业务库无关,因此使用独立 FreeSql 实例(
ShortFlag),与主库物理隔离(见下文关系图)。 - 可插拔策略:多渠道场景(消息中心)用
IMessageChannelSender策略模式,飞书/企微/公众号各自实现,新增渠道不改核心逻辑。 - 可水平扩展子域:热榜聚合用
keyed IDailyHotService按平台枚举注册多个实现,聚合 Job 遍历所有键即可。
子域划分与业务能力地图
| 子域 | 承载的业务能力 | 关键服务 |
|---|---|---|
| 节假日 | 中国法定节假日/工作日的同步与本地查询 | IHolidayService · IHolidayManager |
| 短链接 | 长链转短码、跳转计数、批量创建(独立库分表) | IShortUrlService |
| 待办事项 | 个人待办 CRUD、完成态、拖拽排序、到点提醒 | IToDoService · INotificationScheduler |
| 消息中心 | 飞书/企业微信/公众号等多渠道统一发送与重试 | IPlatformMessageService · IMessageChannelSender |
| 热榜聚合 | 25+ 平台热搜的统一抓取与落库(DailyHotItem) | keyed IDailyHotService · DailyHotJobService |
| 文本转语音 | MiMo TTS 合成(独立弹性管线,避免慢调用拖垮全局超时) | ITTSService · MimoTtsOptions |
| 导航站 | 导航分类与导航项(公开/管理两套) | ICatalogService · INavItemService |
| 工具/基础设施 | 加密(国密 SM/AES)、IP 查询、行政区划、本地化、链接历史、服务器监控等 | 各子域独立 Service |
核心实体与服务按子域放在
FreeKit.Platform的Holiday/、ShortUrl/、ToDo/或Application/*中;Controller 按相同能力拆到FreeKit.Platform.HttpApi。这是当前目标边界,部分旧子域内部仍有混合结构。
模块关系图
快速开始
Platform 不是通过独立 AddPlatform 扩展注册,而是由宿主组合两个 Startup:
PlatformModuleStartup注册核心服务、FreeSql、外部客户端和业务配置。PlatformHttpApiModuleStartup标记FreeKit.Platform.HttpApi中的 Controller 接入层。
FreeKit.Host/Program.cs 先调用 AddModule<PlatformModuleStartup>("platform", ...),再把 hostModules["platform"] 指向 PlatformHttpApiModuleStartup 并交给 UseFreeKit。FreeKit.DI/E.cs 的核心映射主要供 Job、Message 等后台宿主使用。调整模块组合时必须同时检查这两个入口,不能只删除字典一行。
配置的业务含义
Platform 的配置不是一堆开关,每节都对应一类外部依赖或资源边界:
| 配置节 | 业务含义 | 绑定类 |
|---|---|---|
HolidayAppOption | 节假日同步的年份区间与 api.apihubs.cn 的 API Key——决定了本地缓存覆盖哪几年 | HolidayAppOption |
ShortUrlOption | 短码盐值 / 最小长度 / 分表数——盐值影响 Hashids 输出但不构成访问控制,分表数决定短链库水平拆分粒度 | ShortUrlOption |
ShortUrlConnectionStrings | 短链独立库连接串——让高频且体量大的短链流量与业务库隔离 | AddDefaultFreeSql<ShortFlag> |
PlatformMessage | 消息中心各渠道开关与凭据(飞书/企微/公众号),以及 CmsKit 通知是否外发 | PlatformMessageOptions |
MimoTts | TTS 的 ApiKey / BaseUrl / Model / 超时秒数——单独超时是因为合成慢,避免占用全局 HTTP 超时预算 | MimoTtsOptions |
各子域的详细配置键见对应子页面。