首页
/ Marten框架中的命名兼容性改进:ProjectionName与SubscriptionName的过渡方案

Marten框架中的命名兼容性改进:ProjectionName与SubscriptionName的过渡方案

2025-06-26 05:32:41作者:裴麒琰

背景与问题

在Marten这个基于PostgreSQL的.NET事件溯源和文档数据库框架中,随着版本演进,部分API命名需要进行合理化调整。开发团队发现原有的ProjectionNameSubscriptionName属性命名虽然直观,但在设计一致性上存在改进空间。

技术决策

Marten团队决定采用渐进式演进策略:

  1. 引入新命名规范:将相关属性统一简化为NameVersion
  2. 保持向后兼容:通过创建过渡性shim属性(包装器属性)确保现有代码不中断
  3. 标记过时API:使用[Obsolete]特性提示开发者迁移到新API

实现细节

投影(Projection)相关改进

public abstract class ProjectionBase
{
    [Obsolete("请使用Name属性替代")]
    public string ProjectionName => Name;
    
    public string Name { get; protected set; }
    
    [Obsolete("请使用Version属性替代")] 
    public string ProjectionVersion => Version;
    
    public string Version { get; protected set; }
}

订阅(Subscription)相关改进

public abstract class SubscriptionBase
{
    [Obsolete("请使用Name属性替代")]
    public string SubscriptionName => Name;
    
    public string Name { get; protected set; }
    
    [Obsolete("请使用Version属性替代")]
    public string SubscriptionVersion => Version;
    
    public string Version { get; protected set; }
}

事件切片(IEventSlice)改进

同步对事件切片接口进行了类似优化:

public interface IEventSlice
{
    [Obsolete("请使用Snapshot属性替代")]
    object Aggregate => Snapshot;
    
    object Snapshot { get; }
}

开发者迁移指南

  1. 立即行动项

    • 编译器警告中提示的[Obsolete]属性应尽快处理
    • 将代码中的ProjectionName更新为Name
    • SubscriptionVersion更新为Version
  2. 兼容性保证

    • 旧属性仍会继续工作,但建议在新代码中使用统一命名
    • 过渡期结束后(通常2-3个主版本),旧属性可能会被移除

设计思考

这种演进方式体现了几个优秀实践:

  1. 平滑过渡:避免破坏性变更给开发者带来困扰
  2. 显式沟通:通过编译器警告明确指导迁移路径
  3. 命名简化:统一的核心属性名使API更加整洁
  4. 关注点分离:通过包装器属性保持单一职责原则

总结

Marten通过这种渐进式API演进策略,既改善了框架内部的一致性,又最大限度地降低了对现有用户的影响。这种模式值得在需要进行重大API变更的库开发中借鉴,它平衡了技术债务清理和用户体验保护的双重需求。开发者应当利用这个过渡期逐步更新代码,为未来的框架升级做好准备。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
203
2.18 K
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
208
285
pytorchpytorch
Ascend Extension for PyTorch
Python
62
94
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
977
575
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
9
1
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
550
84
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.02 K
399
communitycommunity
本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息
393
27
MateChatMateChat
前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com
1.2 K
133