<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>整洁架构 on 追风笔记</title><link>https://f91dba72.wangpeng.pages.dev/tags/%E6%95%B4%E6%B4%81%E6%9E%B6%E6%9E%84/</link><description>Recent content in 整洁架构 on 追风笔记</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Mon, 18 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://f91dba72.wangpeng.pages.dev/tags/%E6%95%B4%E6%B4%81%E6%9E%B6%E6%9E%84/index.xml" rel="self" type="application/rss+xml"/><item><title>六边形架构在银行核心系统的落地</title><link>https://f91dba72.wangpeng.pages.dev/columns/architecture/hex-architecture/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://f91dba72.wangpeng.pages.dev/columns/architecture/hex-architecture/</guid><description>&lt;p&gt;银行核心最痛的不是业务复杂，而是&lt;strong&gt;业务逻辑和周边技术死死绑在一起&lt;/strong&gt;：换连接池要改核心，接新渠道要动账务，单测要起一整套中间件。六边形架构（Ports &amp;amp; Adapters）给出干净解法。&lt;/p&gt;&#10;&lt;h2 id="核心端口与适配器"&gt;核心、端口与适配器&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;领域核心&lt;/strong&gt;：纯业务规则，不依赖任何框架、数据库或 HTTP 客户端。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;端口&lt;/strong&gt;：核心暴露（入站）和需要（出站）的接口，用 Java 接口表达意图。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;适配器&lt;/strong&gt;：把端口接到具体技术——REST 控制器是入站适配器，JDBC 仓储是出站适配器。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-89492c2e-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="java" data-td-line-count="5"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-89492c2e-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;AccountRepository&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 端口：只定义要什么&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Account&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AccountId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Account&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;JdbcAccountRepository&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AccountRepository&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* 技术留在外围 */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;判断架构是否干净的一条硬标准：删掉数据库、MQ、Web 框架，核心业务代码还能原封不动地跑并被测。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="在银行核心里怎么切"&gt;在银行核心里怎么切&#10;&lt;/h2&gt;&#10;&lt;p&gt;核心账务、计息、限额放在中心；大小额网关、CBS 接口、短信、风控回调全做成外围适配器。监管规则变了只动核心，接新清算通道只加一个适配器。&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;层次&lt;/th&gt;&#10; &lt;th scope="col"&gt;内容&lt;/th&gt;&#10; &lt;th scope="col"&gt;依赖框架&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;领域核心&lt;/td&gt;&#10; &lt;td&gt;账务、计息、限额&lt;/td&gt;&#10; &lt;td&gt;否&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;应用层&lt;/td&gt;&#10; &lt;td&gt;用例编排&lt;/td&gt;&#10; &lt;td&gt;否&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;适配层&lt;/td&gt;&#10; &lt;td&gt;REST/JDBC/MQ&lt;/td&gt;&#10; &lt;td&gt;是&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="收益与代价"&gt;收益与代价&#10;&lt;/h2&gt;&#10;&lt;p&gt;收益是可单测、可独立部署、渠道可替换；代价是初期抽象成本与团队纪律。在银行这种长生命周期系统里，核心被技术债锁死的代价远高于前期投入。&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;架构不是墙上的图，而是写在依赖箭头里的纪律。六边形的价值，是让「技术变了业务不动」成为默认结果。&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item></channel></rss>