C# 方法的返回值设计:返回 null、空集合还是抛异常
同样一个"查数据"的方法,有的返回 null,有的返回空列表,找不到还抛异常——调用方每次都得猜,这就是 bug 的温床。这篇讲清楚四种返回值语义各自该用在什么场景,以及怎么用可空引用类型把它写进签名。
C# 用模块化单体拆分大泥球:按模块组织代码,而不是按技术分层
很多 C# 项目活到第三年就会变成这样:改一个"下单送积分"的需求,要在 7 个文件夹里翻代码。这不是团队不努力,而是"按技术分层"的组织方式把业务切碎了。这篇讲一个不上微服务也能落地的方法:模块化单体(Modular Monolith)。
C# 审计日志:谁在什么时候把哪个字段从什么改成了什么
出了纠纷,运营说“这个订单是财务改的”,财务说“我只是点了退款”。你去翻操作日志,只看到一行“bob 修改了订单”。改的是哪个字段、原来是什么值、改成什么值,一个字都没有。这种日志在合规审计面前等于不存在。
C# 分页查询:offset 的坑与游标分页
分页大家都会写:LIMIT 10 OFFSET 20。但数据量一大、翻页一深,它就开始变慢,还会莫名其妙地漏数据或重复数据。本篇讲清 offset 的坑,并用游标分页(keyset pagination)彻底解决。
别再只会写 T:Kotlin 泛型的实战用法
上一篇介绍了 Kotlin 泛型的基础。这一篇,我们先看类型参数之间的关系与约束,再把它们用于数据容器、结果包装、对象构建和数据转换,最后讨论运行时类型检查与反射的边界。我想借这篇文章,把自己了解的一些泛型用法尽量整理出来,因此例子会多一些,读起来可能稍显啰嗦。
Redis 数据类型全解 - Hash 还是 JSON?一文终结存储选型之争(三)
在 Redis 做业务对象缓存时,几乎所有开发者都会面临这个经典抉择:Hash:HSET user:1001 name "张三" age 28,将对象扁平拆分为 field-value;String+JSON:SET user:1001 '{"name":"张三","age":2
鸿蒙 PC 上用 RNOH 开发开源鸿蒙应用
工具链由 HNP 包 hmos-clt 提供:ohpm 6.0.1 / hvigorw 7.26.8 / hdc 3.2.0f / OpenHarmony SDK API 26。
C# AI开发 篇134:检索降级:向量搜不到的时候别直接说"不知道"
上一篇讲的是"检索链怎么搭、权限怎么滤",这一篇只讲一件事:当向量检索没搜到时,不要直接回"不知道"。用户问的是订单号、是刚上线的产品名、是打错一个字的"支付保",向量检索对这些几乎无感。正确的做法不是换更大的模型,而是按查询特征先路由,再逐级降级。