“设计”标签的文章
带有“设计”标签的文章共 26 篇,按发布日期从新到旧排列。
-
多线程实战最佳实践 Java 篇——虚拟线程时代的惯用做法
Java 多线程的惯用做法是不直接创建线程,而是交给 ExecutorService 与虚拟线程。本文梳理 synchronized 与 ReentrantLock 的取舍、基于中断的协作式停止、ConcurrentHashMap 的原子操作,直到 Swing 的 EDT 等实战原则。
-
多线程实战最佳实践 C 语言篇——以 Win32 API 的方式安全编写
C 语言 × Win32 的多线程自有定式:用 _beginthreadex 创建线程、SRW 锁与条件变量、Interlocked,以及停止事件 + WaitForMultipleObjects 的停止设计。本文还梳理 TerminateThread 的危险与 DllMain 的限制。
-
多线程实战最佳实践 C++ 篇——用 RAII 和 jthread 从结构上杜绝问题
C++ 的多线程里数据竞争就是未定义行为。本文梳理 std::thread 析构函数的陷阱、jthread 与 stop_token 的停止设计、scoped_lock 的死锁规避、atomic 的正确定位,直到与 Win32 同步 API 的区分使用。
-
多线程实战最佳实践 .NET 篇——增加线程之前必须先定好的事
面向 .NET/C# 梳理防止“线程一开就偶尔崩溃、偶尔卡死”的设计做法,涵盖不自己创建线程而依托 Task、减少共享可变状态、加锁的纪律、用 CancellationToken 设计停止流程,直到 UI 线程的处理方式。
-
不要直接使用 QR 码的读取值——纠错通过也不保证值是正确的
QR 码的纠错并不是一种只要纠错通过就保证值正确的机制。本文基于样本图像和两种解码器的实测,讲解污损落点不同会被读成另一个值的原因,以及业务系统一侧必须做的验证。
-
不再使用 Write-Host ── PowerShell 的输出流与日志设计
本文整理 PowerShell 六个输出流的用法区分、Write-Host 存在的问题与正确的使用场景、函数返回值被污染的原因、通过 -Verbose 与 -InformationVariable 实现调用方控制,以及结构化日志的留存方法。
-
业务系统的编码设计 ── 商品编码・客户编码的确定方法与校验位
确定商品编码・客户编码等业务系统编码体系的实践指南。整理了有意义编码与无意义流水号的判断表、JAN・Luhn等校验位算法及C#实现、Excel开头零丢失的应对方法,直至位数溢出与迁移。
-
ADR(Architecture Decision Record)入门 —— 在小规模开发中,用最简方法留住「为什么这样设计」
代码不会告诉你「为什么这样做」。本文讲解如何用 ADR(Architecture Decision Record),以「1 个决定 = 1 个 Markdown 文件」的方式记录设计判断的理由,并附带模板、写与不写的判断表,以及实际案例。
-
别忘了先定好「多少秒才算达标」── 用 IPA「非功能要求分级」梳理非功能需求
「速度太慢」「故障应对超出预期」等纠纷,大多源于没有事先决定好非功能需求。本文用发包方也能理解的语言,解析 IPA「非功能要求分级」的六大项目、分级表与模型系统的用法,以及切实可行的应用方式。
-
Windows 应用不适合 Web 化的情形 ── 判断表与「拆分」这一现实解法
「想把公司内部的 Windows 应用改造成 Web」的需求正在增加,但对于涉及设备联动、本地文件处理、离线运行、高速录入界面的应用来说,Web 化反而可能带来成本上升与功能劣化。本文从 Windows 委托开发的实务视角,整理出适合与不适合 Web 化的判断表,并提出「不是全部 Web 化,而是只把一部分放到 ...
-
如何理解 Windows 的会话隔离 ── Session 0・RDP・多用户同时运行
整理 Windows 应用程序开发者容易混淆的「会话」概念。说明服务无法显示 UI 的 Session 0 隔离原因、RDP 连接时会话的行为、命名对象的会话隔离,以及共享 PC・RDS 环境中常见的设计失误,从实务角度解说。
-
Windows 的进程间通信该怎么选 ── 命名管道 / TCP / gRPC / 共享内存 / COM 判断表
整理 Windows 应用程序之间应该如何选择通信方式。用判断表整理命名管道、本地 TCP、gRPC、共享内存、文件对接、COM 各自的优势与陷阱,并从实务角度说明 UI+服务分离・32bit/64bit 桥接・权限边界等常见架构,以及命名管道的实现示例。
-
Windows应用的数据存储位置怎么选 ── SQLite / JSON / 注册表 / Access 判断表
Windows桌面应用的数据该存在哪里、用什么格式保存?本文整理AppData/ProgramData的使用区分,以及SQLite、JSON文件、注册表、Access(.accdb)各自的优势与陷阱,并附判断表,从实务角度讲解防止数据损坏与位数问题等注意事项。
-
异常处理中,catch 与日志应该放在哪里
为了避免在深层 helper 中大范围 catch、各层重复记录日志,以及隐藏原因的结果化处理,本文整理捕获异常的边界、主日志记录点,以及恢复判断的职责划分。
-
为什么在 Windows 上应优先选择事件等待而非 Sleep(1)
在 Windows 上,短时 timed wait 的精度会受到 system clock 粒度和调度延迟的影响。本文整理了为什么在等待任务到达、I/O 完成或停止请求时,应该采用事件驱动而不是按固定间隔轮询。
-
意外异常发生时,应用该终止还是继续的判断表
从状态破坏、外部副作用、线程、原生边界这几个角度,梳理发生意料之外的异常时,应该让应用终止还是继续运行。
-
Windows 应用程序开发的安全最低限度检查清单
面向 WPF / WinForms / WinUI / C++ / C# 的业务应用程序,以检查清单的形式梳理权限、签名、更新、机密信息、HTTPS、输入验证、DLL 加载、日志这些方面的基本要点。
-
.NET Generic Host 是什么 - DI、配置、日志的基础
本文从 DI、配置、日志、IHostedService、BackgroundService 的关系入手,整理 Generic Host 的作用,从实务角度总结它在什么地方有效、在什么地方又显得多余。
-
.NET Native AOT 是什么 - 与 JIT、trimming 的区别
从与 JIT、ReadyToRun、self-contained、single-file、trimming、source generator 的区别出发,梳理 Native AOT 究竟是什么,并以实务视角总结它适合的场景与吃力的场景。
-
.NET 三种计时器的使用区分 - PeriodicTimer/Timer/DispatcherTimer
整理 PeriodicTimer / System.Threading.Timer / DispatcherTimer 的区别,以及在 async 处理、ThreadPool callback、WPF 的 UI 更新中该如何区分使用。
-
在桌面应用中使用 .NET Generic Host 与 BackgroundService 的理由
本文整理在 Windows 工具或常驻应用中,如何使用 Generic Host 与 BackgroundService 来梳理启动、定期处理、退出处理、日志、配置与 DI。
-
FileSystemWatcher 实务指南:应对遗漏通知与重复通知
本文从遗漏通知、重复通知、完成判定的陷阱、重新扫描、原子式 claim、idempotency(幂等性)等角度,整理 FileSystemWatcher 的使用方法与注意事项。
-
C# async/await 实战判断表:Task.Run 与 ConfigureAwait 怎么选
本文整理 C# async/await 的最佳实践,并附上 I/O 等待、CPU 计算、Task.Run、ConfigureAwait(false)、fire-and-forget 的判断表。
-
在普通 Windows 上尽量做到软实时的实践指南
本文整理在普通 Windows 上让周期处理与低延迟处理保持稳定的思路,从定时器精度、线程优先级、电源设置和监测方法等角度展开说明。
-
文件集成互斥控制基础知识 - 文件锁与原子 claim 的最佳实践
本文从文件锁、原子 claim、temp -> rename、idempotency(幂等性)等角度整理文件集成的互斥控制,并总结在共享文件夹集成中避免出问题的设计方法。
-
HCP 图表与 MakingHCPChartSkill 入门
本文说明什么是 HCP 图表,并整理 MakingHCPChartSkill 将 HCP-DSL 转换为决定性 SVG 的流程、读法与使用方法。