Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts in 2021.7


Build a common cache service for your C# app.

这篇文章介绍了如何通过封装Microsoft.Extensions.Caching.Memory库创建一个更简洁的缓存抽象层,重点展示了CacheService类通过策略模式实现的条件缓存机制与选择器模式的结合应用。作者通过封装后的RunCache方法简化了复杂对象的缓存操作,允许开发者通过设置缓存过期时间动态控制数据新鲜度,并通过Selector模式实现缓存数据的转换处理。单元测试示例验证了该方案在不同场景下的行为特征:包括基于缓存条件的动态存储策略、对null值的特殊处理、通过选择器转换数据后的缓存逻辑,以及如何通过设置0分钟缓存时间实现强制刷新。这种设计既保持了原始缓存库的灵活性,又通过策略模式将缓存规则与业务逻辑解耦,为复杂缓存场景提供了可扩展的解决方案。测试用例的覆盖范围暗示着该模式在处理多条件组合缓存场景时的鲁棒性,同时引发思考:是否还有其他维度可以扩展这种缓存策略模式?--Qwen3

ASP.NET Core C# .NET Core Performance Caching .NET Cache MemoryCache

Restore a deleted branch from Azure DevOps using it's SDK

本文介绍了如何通过Azure DevOps SDK恢复被误删的代码分支的技术方案。文章指出当开发分支被删除后,可以通过Azure DevOps提供的Git API获取分支最后的提交记录,并利用Git引用更新机制重建分支。开发者需要先通过VssConnection建立认证连接,使用GitHttpClient获取分支的推送历史,找到被删除前的提交ID,再通过UpdateRefsAsync方法将分支引用重新指向该提交。这个过程涉及对Git底层引用机制的深入理解,包括如何处理旧对象ID与新对象ID的映射关系。代码示例展示了如何构建GitPushSearchCriteria查询参数,解析返回的RefUpdates数据,并构造GitRefUpdate请求体。特别值得注意的是,文章揭示了在更新引用时将OldObjectId设为全零占位符的技巧,这是实现分支恢复的关键技术点。技术实现过程中涉及的权限控制、项目名称与仓库ID的匹配等问题,为开发者提供了思考空间。当本地执行git fetch后,删除的分支会重新出现在版本历史中。这引发我们思考:如何在团队协作中设计分支保护策略?当多用户同时操作时,这种恢复机制是否具有原子性?如果在不同版本的Azure DevOps中执行该操作,可能会遇到哪些兼容性问题?--Qwen3

C# git Azure Azure DevOps SDK Git Branch Restore