<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hangsun的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hangsun</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hangsun]]></copyright><item><title><![CDATA[Deepseek 让中国软件像哪吒一样渡劫]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/145829413</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/145829413</guid><author>hangsun</author><pubDate>Mon, 24 Feb 2025 15:07:57 +0800</pubDate><description><![CDATA[如前所述，Deepseek 使用的是 MIT 开源协议。该协议允许任何组织和个人，均可以基于该开源项目进行分发、复制、商业化等等，甚至在此基础上发展的商业项目选择闭源，也都不受限制。这实际上就是允许所有企业或组织“白嫖”！在这三重后果的组合作用下，考虑到信息安全，企业和组织要使用大模型提升内部的效率、客户服务的质量、甚至开发各类基于大模型的业务应用，不二的选择就只能是“私有化部署 Deepseek”。]]></description><category></category></item><item><title><![CDATA[mybatis自定义sql insert报错：selectKey不起作用、以及报错找不到getter方法]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/135859372</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/135859372</guid><author>hangsun</author><pubDate>Fri, 26 Jan 2024 10:13:08 +0800</pubDate><description><![CDATA[1）如果要使用selectKey提前自动生成字段ID，就在mapper interface方法定义中，如果使用@param。就需要在使用insert语句中，通过@param指定的名称来方位bean的属性；如果不使用@param就可以省去名称。2）使用selectKey获取多列数据时，千万不要在keyProperty中的列之间加空格（一般处于编码习惯，都会自然而然的加一个空格）。就这个例子来说，不使用@param会更简洁。然后代码就能够正常运行了。]]></description><category></category></item><item><title><![CDATA[DDD 实战 (12- 终篇)：DDD 下微服务的“分分合合”及一个倡议]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/126528592</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/126528592</guid><author>hangsun</author><pubDate>Thu, 25 Aug 2022 17:18:03 +0800</pubDate><description><![CDATA[在前面的《DDD 实战 (6)：战略设计之技术决策》中，我曾经提到“微服务随时可拆可分”。而在上篇《DDD 实战(11)：冲刺 1 代码 TDD 实现之道》几乎展示了所有 DDD 相关的、基于 TDD 代码“三部曲”的编程方式之后，就只上下这一个问题没有从代码角度进行演示了。本篇就来演示“微服务的随时可拆可分”这一 DDD 编程特性。同时，这将是本系列的最后一篇文章。]]></description><category></category></item><item><title><![CDATA[DDD 实战 (11)：冲刺 1 代码 TDD 实现之道]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/126528346</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/126528346</guid><author>hangsun</author><pubDate>Thu, 25 Aug 2022 17:01:44 +0800</pubDate><description><![CDATA[接上篇《DDD 实战 (10)：冲刺 1 战术之服务设计（下）及技术决策》后，我们接下来的重点，就是要展示真正的代码实现了。在本篇中，我将围绕 TDD（Test-driven development, 测试驱动开发）编程方法为核心，演示前面完成的相关 DDD 设计是如何落地的。



      在本篇中，我将首先介绍 TDD 三重奏（写测试-写功能-重构）和相关原则，然后用实际代码演示 TDD 的工作流程，最后我会讲到编程过程中采用哪些技巧处理一些现实的技术细节问题。]]></description><category></category></item><item><title><![CDATA[DDD 实战 (10)：冲刺 1 战术之服务设计（下）及技术决策]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/126528168</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/126528168</guid><author>hangsun</author><pubDate>Thu, 25 Aug 2022 16:54:52 +0800</pubDate><description><![CDATA[接上篇《DDD 实战 (9)：冲刺 1 战术之服务设计》完成了“群买菜”系统 sprint1 服务设计的主要篇幅之后，本篇完成 sprint1 剩下的服务设计（主要是商品上下文），以及战术设计中需要进行的技术决策（这个只有第一次冲刺才需要）。]]></description><category></category></item><item><title><![CDATA[DDD 实战 (9)：冲刺 1 战术之服务设计（上）]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/126527571</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/126527571</guid><author>hangsun</author><pubDate>Thu, 25 Aug 2022 16:46:35 +0800</pubDate><description><![CDATA[接上篇《DDD 实战 (8)：冲刺 1 战术之聚合设计》完成了“群买菜”系统战术设计的所有聚合设计之后，本篇将完成 sprint1 服务设计的主要部分（鉴权上下文、订单上下文）。]]></description><category></category></item><item><title><![CDATA[DDD 实战 (8)：冲刺 1 战术之聚合设计]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/126514384</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/126514384</guid><author>hangsun</author><pubDate>Wed, 24 Aug 2022 22:58:21 +0800</pubDate><description><![CDATA[本篇开始我们对“群买菜”首个冲刺的战术设计进行描述。上篇《DDD 实战 (7)：战术设计、整体流程与首次冲刺》中，我们已经识别了首个冲刺的 14 个业务用例和 23 个服务契约的识别，并分别给出了相应的业务用例规约和服务契约设计。下面我们分两篇来分别完成：1）按照 14 个业务用例规约完成聚合设计；2）按照 23 个服务契约，在聚合设计的基础上，完成服务设计（含应用服务、领域服务）；3）作为首个冲刺，完成必要的战术层面相关技术决策（这一步工作一般只在首个冲刺的时候会做，后面的冲刺可能会有补充完善）。]]></description><category></category></item><item><title><![CDATA[DDD 实战 (7)：战术设计、整体流程与首次冲刺]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/126514318</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/126514318</guid><author>hangsun</author><pubDate>Wed, 24 Aug 2022 22:50:46 +0800</pubDate><description><![CDATA[上篇《DDD 实战 (6)：战略设计之技术决策》已经完成了“群买菜”的全局性（“全局性”的意思，是说整个系统只会有一次）战略设计。从本篇开始，我们就要进入实质性的系统实现过程了。这主要包括战术设计和代码实现。]]></description><category></category></item><item><title><![CDATA[DDD 实战 (6)：战略设计之技术决策]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/126514197</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/126514197</guid><author>hangsun</author><pubDate>Wed, 24 Aug 2022 22:47:09 +0800</pubDate><description><![CDATA[篇《DDD 实战 (5)：战略设计之上下文映射和系统分层架构》完成了“限界上下文识别”和“限界上下文关系映射”这两个 DDD 战略设计阶段最重要的工作，甚至给出了代码目录结构，我们在 DDD 战略设计阶段就剩下最后一个内容：战略层面的技术决策。本篇就是要完成这部分内容。]]></description><category></category></item><item><title><![CDATA[DDD 实战 (5)：战略设计之上下文映射和系统分层架构]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/126514028</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/126514028</guid><author>hangsun</author><pubDate>Wed, 24 Aug 2022 22:39:45 +0800</pubDate><description><![CDATA[在上篇《DDD 实战 (4)：战略设计之系统上下文和限界上下文》完成了限界上下文的识别（也就是系统“最粗粒度”的模块划分）后，我们需要对这些上下文之间的协作关系进行分析——即“限界上下文关系映射”。也只有在完成上下文关系映射后，我们才能真正的判定自己所做出的“限界上下文识别”是否真的达到了自己想要的“低耦合、高内聚”的目标。因为，通过“限界上下文映射”我们就能够看到：1）这些上下文之间有哪些协作关系？2）这些关系是强关联还是弱关联？]]></description><category></category></item><item><title><![CDATA[DDD实战(4)：战略设计之系统上下文和限界上下文]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/126513932</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/126513932</guid><author>hangsun</author><pubDate>Wed, 24 Aug 2022 22:29:22 +0800</pubDate><description><![CDATA[到上篇《DDD 实战 (3)：整体工作框架和全局需求分析》为止，我们已经完成了“群买菜”在“问题空间”的全局分析，本节开始进入“解空间”映射。我将用两节的篇幅来讲解“群买菜”的战略设计。首先，对战略设计的理论知识做一个浓缩性介绍；其次，分三节介绍“群买菜”的 DDD 战略设计，包括：本节介绍系统上下文定义、限界上下文识别；下节介绍“群买菜”限界上下文映射、系统分层架构；最后一节介绍群买菜“战略层技术决策”。]]></description><category></category></item><item><title><![CDATA[DDD 实战 (3)：整体工作框架和全局需求分析]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/123435445</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/123435445</guid><author>hangsun</author><pubDate>Fri, 11 Mar 2022 22:33:13 +0800</pubDate><description><![CDATA[DDD 本质上是个“软件设计”方法论，它指导的是“怎么做软件设计”。故在正式开始“群买菜”的软件设计之前，我们先对 DDD 整体方法论做一个简单的、从我个人角度理解的介绍。]]></description><category></category></item><item><title><![CDATA[DDD实战(2)：看看代码结构长啥样]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/123217799</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/123217799</guid><author>hangsun</author><pubDate>Tue, 01 Mar 2022 22:18:26 +0800</pubDate><description><![CDATA[真正开始 DDD 旅程前，我想让您看到经过 DDD 设计之后的代码长啥样。我想，这是所有本着“talking is easy, show me your code”理念的程序员都比较在乎的观念。]]></description><category></category></item><item><title><![CDATA[DDD实战(1)：从需求到代码实现生鲜电商系统]]></title><link>https://blog.youkuaiyun.com/hangsun/article/details/123037263</link><guid>https://blog.youkuaiyun.com/hangsun/article/details/123037263</guid><author>hangsun</author><pubDate>Thu, 24 Feb 2022 12:30:46 +0800</pubDate><description><![CDATA[通过本专题的旅程，您将能够理解 DDD 从需求分析、到架构设计、到编码实现的整个过程，以及其中的工作方法和实用技巧。]]></description><category></category></item></channel></rss>