<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>AI 编程 on Cooper&#39;s Blog</title>
    <link>https://www.wsqyouth.cn/tags/ai-coding/</link>
    <description>Recent content in AI 编程 on Cooper&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <managingEditor>Coopers</managingEditor>
    <atom:link href="https://www.wsqyouth.cn/tags/ai-coding/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Claude Code 的 Spec Coding 项目实战总结</title>
      <link>https://www.wsqyouth.cn/2026/03/13/claude-code-spec-coding-review/</link>
      <pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.wsqyouth.cn/2026/03/13/claude-code-spec-coding-review/</guid>
      <description>&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;在自己的项目中使用了 Spec Coding，但需要更好的组织和复盘&lt;/li&gt;
&lt;li&gt;参考了得物技术的分享文章：&lt;a href=&#34;https://mp.weixin.qq.com/s/1Oi7YhMgcPp9gQAWPndXWA&#34;&gt;AI 编程能力边界探索：基于 Claude Code 的 Spec Coding 项目实战｜得物技术&lt;/a&gt;，结合该文章对自己的项目进行了记录和复盘思考&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;一概述&#34;&gt;一、概述&lt;/h3&gt;
&lt;p&gt;10 天时间，完成了 10,428 行代码的开发。基于 Claude Code 的 Spec Coding 方法，不仅实现了从 0 到 1 的前后端项目搭建，更学会了规范编程，摸清了 AI 编程的真实能力边界。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 统计 Go/JS 文件行数，排除 frontend/node_modules 目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find . -type f &lt;span class=&#34;se&#34;&gt;\(&lt;/span&gt; -name &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.go&amp;#34;&lt;/span&gt; -o -name &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.js&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\)&lt;/span&gt; -not -path &lt;span class=&#34;s2&#34;&gt;&amp;#34;./frontend/node_modules/*&amp;#34;&lt;/span&gt; -exec wc -l &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; +
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;什么是 Spec Coding&lt;/strong&gt;：在写代码之前，先编写规范文档。
&lt;strong&gt;价值体现&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;减少返工&lt;/li&gt;
&lt;li&gt;特别适合复杂功能开发，能让 AI 更聚焦当前 story 的实现&lt;/li&gt;
&lt;li&gt;可审计性：每一个变更都有记录，方便审计
&lt;img alt=&#34;Spec Coding 工作流程&#34; loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/13/claude-code-spec-coding-review/spec-coding-workflow.png&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;AI 复盘&lt;/strong&gt;：可以让 Claude Code 对.jsonnl 会话文件进行整体数据统计，揭示 AI 的工作模式：xx 次文件读取、xx 次代码编辑、xx 次终端命令执行，以及 xx 次任务进度标记。（这个我没做，后续记得使用）&lt;/p&gt;
&lt;h3 id=&#34;二研发过程&#34;&gt;二、研发过程&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设计阶段&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PRD：对齐需求，也是后续 AI 生成代码的重要参考&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;项目框架搭建&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主要让 AI 充当架构师角色，围绕提供的框架要求完善技术栈、组件选型、代码架构设计等&lt;/li&gt;
&lt;li&gt;目标是搭建完整的项目框架，配置好开发环境，确保基本编译通过&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;功能开发&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;开发强度最高的阶段&lt;/li&gt;
&lt;li&gt;引入 Spec Coding，先与 AI 共同定义清楚每个 story 的规范和方案&lt;/li&gt;
&lt;li&gt;AI 基于这份&amp;quot;契约&amp;quot;完成编码&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调试与压测&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;重心转向功能迭代、系统重构和压测&lt;/li&gt;
&lt;li&gt;与 AI 协作完成已有功能优化：
&lt;ul&gt;
&lt;li&gt;前端：例如添加邮箱账号切换功能，订单列表数据从 mock 数据改为调用真实后端接口&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;后端：技术债务处理（部分接口字段格式不统一、json 字段设计不合理、异步消费架构设计问题）&lt;/li&gt;
&lt;li&gt;性能强化：通过压测和火焰图观测，修复暴露的问题&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;生产环境部署&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在云服务器安装 docker 及相关组件&lt;/li&gt;
&lt;li&gt;通过 scp 等方式上传本地二进制文件及配置文件&lt;/li&gt;
&lt;li&gt;安装 HTTPS 访问所需的证书&lt;/li&gt;
&lt;li&gt;经过与 AI 多轮分析，最终将整个功能部署上线&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;三思考&#34;&gt;三、思考&lt;/h3&gt;
&lt;p&gt;整个 AI 开发过程中的关键点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;CLAUDE.md 及相关文件&lt;/strong&gt;：需要渐进性加载，将规范、经验和开发流程规范放入其中，这样 AI 才能更理解需求&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示范文件提供&lt;/strong&gt;：在编写单元测试时，将之前的 TDD 编程示例提供给 AI 后，AI 能够按照参考完成所有核心文件的单元测试撰写&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;遇到的问题&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AI 会无条件服从，有时甚至过度阿谀奉承，需要保持警惕（例如你说有问题它就考虑有问题，你说好它就说好）&lt;/li&gt;
&lt;li&gt;AI 设计的方案有时会过于繁杂臃肿，缺乏高质量工程师的代码品味（例如在添加链路追踪功能时，AI 最初设计了业务侵入严重的方案，直到明确指出&amp;quot;核心原则是进程内通过 context 传递，进程之间通过 body metadata 传递&amp;quot;，AI 才意识到开源库 OpenTelemetry 也采用类似思想）&lt;/li&gt;
&lt;li&gt;AI 存在上下文丢失和压缩问题，目前还没有非常好的解决方案（提炼经验信息也会丢失）&lt;/li&gt;
&lt;li&gt;实测发现 Claude 的 CodeReview 能力不是很强，后续可以考虑尝试 Codex 或 ChatGPT 模型&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    <item>
      <title>跨境订单智能诊断系统复盘</title>
      <link>https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/</link>
      <pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;年前就一直想做一个前后端链路打通的作品，经过不断打磨，这个项目最近终于告一段落。在此做一个简单的复盘。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;目录&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/#%e4%b8%80%e9%a1%b9%e7%9b%ae%e8%83%8c%e6%99%af&#34;&gt;项目背景&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/#%e4%ba%8c%e4%ba%a7%e5%93%81%e6%95%88%e6%9e%9c&#34;&gt;产品效果&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/#%e4%b8%89%e6%8a%80%e6%9c%af%e5%ae%9e%e7%8e%b0&#34;&gt;技术实现&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/#%e5%9b%9b%e6%94%b6%e8%8e%b7%e6%88%90%e9%95%bf&#34;&gt;收获成长&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;一项目背景&#34;&gt;一、项目背景&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;客户痛点&lt;/strong&gt;：中小卖家在进行跨境发货时，面临物流订单地址异常检测和物流商比价两大痛点，因此我做了一个轻量级的跨境订单智能诊断平台。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;产品优势&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;轻量级&lt;/strong&gt;：市场上有类似系统，但需要付费购买庞大的 SaaS 应用，而客户往往只需要一个轻量的工具&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;双端支持&lt;/strong&gt;：平台支持界面手动填写，也支持 API 接入（未来还可以封装为 MCP，供 AI 调用）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;即插即用&lt;/strong&gt;：客户只需理解一套标准接口即可快速接入，背后支持多家物流商的地址异常检测和费率、时效查询&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;从个人层面来说，我希望通过这样一个前后端打通的 MVP 作品，对整个系统设计有一个更深的认识。另外，现在 AI 编程能力已经很强，只要你思考得足够清晰，剩下的实现可以交给 AI。&lt;/p&gt;
&lt;h3 id=&#34;二产品效果&#34;&gt;二、产品效果&lt;/h3&gt;
&lt;h4 id=&#34;21-平台界面&#34;&gt;2.1 平台界面&lt;/h4&gt;
&lt;p&gt;整个系统已部署到个人服务器：&lt;a href=&#34;https://oip.wsqyouth.cn/&#34;&gt;&lt;strong&gt;OIP 诊断平台&lt;/strong&gt;&lt;/a&gt;，可登录 &lt;code&gt;test@example.com&lt;/code&gt; 体验。&lt;/p&gt;
&lt;p&gt;系统包含四个模块：概览、订单列表、新建诊断、账号管理。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;产品概览&lt;/strong&gt;
客户故事：登录账号 → 新建物流订单 → 提交诊断 → 在订单列表查看诊断结果 → 通过概览了解整体诊断情况。
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/platform-overview.png&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;客户注册及账号切换&lt;/strong&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/platform-account-switching.png&#34;&gt;
为什么这么设计？因为海外用户主要以邮箱作为账号主体来处理业务，因此设计为通过邮箱切换账号，登录后即可查看该账号下的订单。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;新建诊断&lt;/strong&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/create-diagnosis.png&#34;&gt;
客户填写订单信息后，由诊断平台执行诊断并返回结果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;诊断结果页面&lt;/strong&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/diagnosis-result.png&#34;&gt;
每个订单都会得到一份诊断结果：物流信息是否异常，以及当前这票快递可选的物流商有哪些，其中哪个服务最便宜、哪个最快。
&lt;strong&gt;备注&lt;/strong&gt;：当前物流商接口数据为 Mock 随机值，后续可接入真实物流商 API。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;三技术实现&#34;&gt;三、技术实现&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;系统部署架构&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;用户浏览器 → https://oip.wsqyouth.cn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Nginx (host, port 443)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            ├── /       → 前端静态文件
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            └── /api/   → reverse proxy → 127.0.0.1:8080 (dpmain)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            dpmain (Go binary, host, :8080)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              ├── MySQL   (Docker, 127.0.0.1:3306)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              ├── Redis   (Docker, 127.0.0.1:6379)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              └── Lmstfy  (Docker, 127.0.0.1:7777)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            dpsync (Go binary, host)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;前端&lt;/strong&gt;基于 React 实现。这部分是我写好 PRD 后直接让 AI 实现的，我并不太熟悉前端，就不展开了。主要的设计考量是：路由、静态页面、业务逻辑这几块要分层，方便后续扩展。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;后端&lt;/strong&gt;系统技术架构如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┌─────────────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│              用户/商家系统                        │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└──────────┬──────────────────────────┬───────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           │ HTTP API                 │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           ↓                          │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ┌──────────────┐                 │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │   dpmain     │                 │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  (API 服务)   │                 │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └──────┬───────┘                 │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           │                          │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           │ 1. 订阅 Redis            │ 4. 轮询查询
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           │ 2. 推送 Lmstfy           │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           │ 3. Smart Wait (10s)      │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           ↓                          ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ┌──────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  Redis Pub/Sub + MySQL              │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  channel: diagnosis:result:{id}     │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └──────────────┬──────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   ↑
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   │ 5. 发布结果
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ┌──────────────┴──────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │      dpsync             │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │   (Worker 服务)          │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │                         │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  CompositeHandler       │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  ├─ ShippingCalculator  │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  └─ AnomalyChecker      │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └─────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;后端基于 Gin 框架，分为 API 服务（dpmain）和异步诊断服务（dpsync），通过 Lmstfy 消息队列解耦。这样设计的考量是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API 同步服务处理校验、耗时短的业务，将耗时较长的诊断环节放到异步任务中。&lt;/li&gt;
&lt;li&gt;消息队列做解耦，一方面使业务架构更清晰，另一方面也为后续微服务拆分留好了扩展点。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;完整请求流程&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. 用户 → POST /api/v1/orders?wait=10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. dpmain: 验证 account → 地址校验 → 订单落库 (DIAGNOSING)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. dpmain: 订阅 Redis channel: diagnosis:result:{order_id}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4. dpmain: 推送 Lmstfy 队列：oip_order_diagnose
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5. dpmain: Smart Wait 10s
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   → 10s 内收到 Redis 消息 → 返回 200 + 诊断结果
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   → 超时 → 返回 3001 + poll_url
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;三个模块的职责划分&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;模块&lt;/th&gt;
          &lt;th&gt;职责&lt;/th&gt;
          &lt;th&gt;技术栈&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;common&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;共享内核：Entity + Model + DAO&lt;/td&gt;
          &lt;td&gt;GORM + Go 标准库&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;dpmain&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;同步 API：HTTP 接口 + Smart Wait + Callback Consumer&lt;/td&gt;
          &lt;td&gt;Gin + Wire + Redis&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;dpsync&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;异步 Worker：消费队列 + 执行诊断 + 发布回调&lt;/td&gt;
          &lt;td&gt;Lmstfy + Template Method&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中 dpmain 的核心架构采用 DDD，领域划分结构如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpmain/internal/app/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── domains/               # 领域层
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── entity/           # et 前缀：聚合根和值对象
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── apimodel/         # API 模型（DTO）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   │   ├── request/      # XxxRequest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   │   └── response/     # XxxResponse
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── modules/          # md 前缀：业务编排
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── repo/             # rp 前缀：仓储接口
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── services/         # sv 前缀：领域服务
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── infra/                # 基础设施层
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── persistence/      # 持久化实现
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── mq/               # 消息队列
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── server/               # 服务器层
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── handlers/         # HTTP 处理器
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── routers/          # 路由配置
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── middlewares/      # 中间件
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── pkg/                  # 工具包
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;[!important] 依赖方向核心原则
&lt;strong&gt;依赖指向领域层，领域层不依赖外部。&lt;/strong&gt;
&lt;code&gt;server → services → modules + repo(接口) ← infra(实现)&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;dpsync 是一个异步消费框架：订阅队列数据，多 Worker 并发消费处理，之后将结果回传或直接结束。主要设计考量：一是并发消费数量可配置化，灵活调节消费能力；二是扩展性好，后续新增的异步任务都能方便地接入。&lt;/p&gt;
&lt;p&gt;总结核心设计决策：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Shared Kernel 架构&lt;/strong&gt;：dpmain 和 dpsync 共处一个仓库，共用 Entity 层，适合 MVP 阶段快速迭代，同时保留了向微服务演进的可能性。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart Wait + Redis Pub/Sub&lt;/strong&gt;：诊断请求先 Hold 住 API 连接，若 10s 内处理完成则直接返回 200 和诊断结果；否则返回 3001 和 poll_url，交由客户端异步轮询。这样既让客户有&amp;quot;伪同步&amp;quot;的实时体验，又避免长连接过多占用服务器资源。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;轻量级链路追踪&lt;/strong&gt;：仅 100 行 Go 代码实现，采样统计各环节耗时占比，方便后续监控优化。同一服务内通过 context 传播，跨服务通过 MQ metadata 传递 trace_id。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;四收获成长&#34;&gt;四、收获成长&lt;/h3&gt;
&lt;h4 id=&#34;41-ai-编程开发&#34;&gt;4.1 AI 编程开发&lt;/h4&gt;
&lt;p&gt;在这个项目中，我掌握了一套 SpecKit 编程范式——无论前端还是后端，与 AI 结对编程时都是先通过文档确定方案和协议，再进入代码开发。&lt;/p&gt;
&lt;p&gt;典型开发流程：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. 阅读 Story → 明确目标和验证标准
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. Plan 模式 → 与 Claude 对齐技术方案
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. Code 模式 → Claude 根据 knowledge/ 规范生成代码
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4. Code Review → 人工审查，发现不符合规范的地方
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5. 提炼规范 → 将 Review 发现的问题沉淀到 coding-standards.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;6. 更新 Story → 记录会话内容、决策、问题
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在开发过程中，一方面对所有改动都通过文档留痕，方便复盘和回退；另一方面也在过程中不断沉淀经验和方法论到 Claude 的配置文档中，为后续项目积累可复用的知识。&lt;/p&gt;
&lt;p&gt;下图是我让 AI 沉淀的一套编程经验：
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/ai-programming-standards.png&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/ai-programming-experience.png&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;42-压测与调试&#34;&gt;4.2 压测与调试&lt;/h4&gt;
&lt;p&gt;如果没有这个环节，充其量就是一个 MVP Demo。只有经过反复压测，才能知道系统的边界和薄弱项在哪里，最终打磨成可以发布到生产环境的产品。&lt;/p&gt;
&lt;p&gt;两天的压测过程中发现了以下问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;日志量过大&lt;/strong&gt;：大量无用日志浪费资源，需要精简为关键信息&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;连接池参数不合理&lt;/strong&gt;：高并发场景下没有使用池化复用连接，导致业务模块 CPU 占用不合理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;指标定义修正&lt;/strong&gt;：客户真正关心的是&amp;quot;快速且成功&amp;quot;，因此将指标定义为&amp;quot;3 秒内成功率&amp;quot;。这个指标一方面反映客户诉求，另一方面也倒逼我们持续提升系统性能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回调队列的多线程化&lt;/strong&gt;：这个环节处于整个链路的末端，起初按多进程模型部署，后来优化为单线程合并到 dpmain（复用 DAO 并简化运维），没想到这里才是最大瓶颈。压测帮我发现了这个关键问题，多线程化后吞吐提升了 75%&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;五总结展望&#34;&gt;五、总结展望&lt;/h3&gt;
&lt;p&gt;当然，距离真正的高并发系统还有很长的路要走。仅我能想到的不足就有：错误标准化、代码耦合优化、进一步性能调优、CI/CD 集成、云原生集群部署等。&lt;/p&gt;
&lt;p&gt;但更重要的是，自己从头经历了一个项目的完整上线过程：原型设计 → 代码开发 → 压测调试 → 上云部署。对整个工程链路有了更深的认识。&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
