summaryrefslogtreecommitdiff
path: root/2025/02/11/从事件风暴看领域驱动设计
diff options
context:
space:
mode:
Diffstat (limited to '2025/02/11/从事件风暴看领域驱动设计')
-rw-r--r--2025/02/11/从事件风暴看领域驱动设计/index.html277
1 files changed, 277 insertions, 0 deletions
diff --git a/2025/02/11/从事件风暴看领域驱动设计/index.html b/2025/02/11/从事件风暴看领域驱动设计/index.html
new file mode 100644
index 00000000..d7d6ef41
--- /dev/null
+++ b/2025/02/11/从事件风暴看领域驱动设计/index.html
@@ -0,0 +1,277 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+<meta name="viewport"
+ content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+<meta http-equiv="X-UA-Compatible" content="ie=edge">
+
+ <meta name="author" content="韩暮秋">
+
+
+ <meta name="subtitle" content="暮秋小屋">
+
+
+ <meta name="description" content="这里是暮秋小屋,思念和灵感的寄存处">
+
+
+ <meta name="keywords" content="韩暮秋,MuqiuHan,'Muqiu Han', 'muqiu han', muqiuhan">
+
+
+
+
+<title>从事件风暴看领域驱动设计 | 暮秋小屋</title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+<style>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
+
+
+
+
+
+
+
+ <meta name="generator" content="Hexo 6.3.0"></head>
+ <body>
+ <div class="mask-border">
+ </div>
+
+ <div class="wrapper">
+
+ <div class="header">
+ <div class="flex-container">
+ <div class="header-inner">
+ <div class="site-brand-container">
+ <a href="/">
+
+ 暮秋小屋
+
+ </a>
+ </div>
+ <div id="menu-btn" class="menu-btn" onclick="toggleMenu()">
+ Menu
+ </div>
+ <nav class="site-nav">
+ <ul class="menu-list">
+
+
+ <li class="menu-item">
+ <a href="/">主页</a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/categories/gallery/">日记本</a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Medicine/">医学</a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Technique/">计算机科学</a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Life/">生活</a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/about">关于</a>
+ </li>
+
+
+
+ <li class="menu-item search-btn">
+ <a href="#">Search</a>
+ </li>
+
+ </ul>
+ </nav>
+ </div>
+ </div>
+</div>
+
+
+ <div class="main">
+ <div class="flex-container">
+ <article id="post">
+
+
+ <div class="post-head">
+ <div class="post-info">
+ <div class="tag-list">
+
+
+ <span class="post-tag">
+ <a href="/tags/Technique/">
+ Technique
+ </a>
+ </span>
+
+
+ </div>
+ <div class="post-title">
+
+
+ 从事件风暴看领域驱动设计
+
+
+ </div>
+ <span class="post-date">
+ Feb 11, 2025
+ </span>
+ </div>
+ <div class="post-img">
+
+ <div class="h-line-primary"></div>
+
+ </div>
+</div>
+ <div class="post-content">
+ <p>事件风暴(Event Storming)是一种领域驱动设计(DDD)的实践方法,由 Alberto Brandolini 提出,旨在通过团队协作的方式快速理解和建模业务领域。</p>
+<p>以下是事件风暴及相关领域驱动设计中的一些核心概念和知识点:</p>
+<p>1. 领域(Domain):指的是业务相关知识的集合,可以进一步划分为子域。<br>2. 子域(Subdomain):是领域的一部分,可以是核心域、支撑域或通用域。<br>3. 核心域(Core Domain):指领域中最核心的部分,通常对应企业的核心业务。<br>4. 通用语言(Ubiquitous Language):团队所有成员使用的一种语言,用于确保业务和软件之间的沟通一致性。<br>5. 限界上下文(Bounded Context):定义了一组规则和协议,用于明确领域模型的适用范围。<br>6. 实体(Entity):具有唯一标识和生命周期的领域对象。<br>7. 值对象(Value Object):描述了某种特性或属性的对象,没有概念标识。<br>8. 聚合(Aggregate):一组相关对象的集合,由一个聚合根(Aggregate Root)统一管理。<br>9. 领域事件(Domain Event):领域中发生的重要事件,可以用于通知其他领域对象或跨限界上下文进行解耦和协作。<br>10. 命令(Command):表示要执行的操作,通常与事件一一对应。<br>11. 读模型(Read Model):为了优化读取操作而设计的模型,可能与写模型不同。<br>12. 决策命令(Decision Command):在事件风暴中,直接导致事件发生的命令。<br>13. 战略设计(Strategic Design):高层次的抽象和归类,包括理清上下文和子域的划分。<br>14. 战术设计(Tactical Design):对特定上下文下的模型进行详细设计,包括聚合、实体和值对象。<br>15. 贫血模型(Anemic Domain Model):领域对象只有属性及其getter&#x2F;setter方法的纯数据类,业务逻辑通过服务实现。<br>16. 充血模型(Rich Domain Model):领域对象包含业务逻辑,每个对象都是活跃的。<br>17. 资源库(Repository):用于检索和持久化领域对象的机制。<br>18. 服务(Service):在模型中独立的操作,可以是领域服务或应用服务。<br>19. 固定规则(Invariant):为设计元素做出的断言,必须一直保持为真。</p>
+<p>事件风暴通常包括以下步骤:</p>
+<ul>
+<li>识别领域事件</li>
+<li>确定事件顺序</li>
+<li>识别命令和触发器</li>
+<li>识别聚合和实体</li>
+<li>划分限界上下文</li>
+<li>识别领域服务和资源库</li>
+<li>通过这些步骤,团队可以共同创建出反映业务领域的领域模型,为软件设计和开发提供指导。</li>
+</ul>
+
+</div>
+
+<script>
+ window.onload = detectors();
+</script>
+ <div class="post-footer">
+ <div class="h-line-primary"></div>
+ <nav class="post-nav">
+ <div class="prev-item">
+
+ <div class="icon arrow-left"></div>
+ <div class="post-link">
+ <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">Prev</a>
+ </div>
+
+ </div>
+ <div class="next-item">
+
+ <div class="icon arrow-right"></div>
+ <div class="post-link">
+ <a href="/2025/02/10/%E5%AE%9E%E6%97%B6%E6%90%9C%E7%B4%A2%E4%B8%AD%E7%9A%84%E9%98%B2%E6%8A%96%E5%87%BD%E6%95%B0/">Next</a>
+ </div>
+
+ </div>
+ </nav>
+</div>
+
+
+ <div class="post-comment">
+
+
+
+
+
+
+
+</div>
+
+
+</article>
+ </div>
+ </div>
+
+ <div class="footer">
+ <div class="flex-container">
+ <div class="footer-text">
+
+
+ |
+
+
+ 希望路过的人可以添点柴火让这里暖和点
+
+ </div>
+ </div>
+</div>
+
+ </div>
+
+
+ <div class="search-popup">
+ <div class="search-popup-overlay">
+ </div>
+ <div class="search-popup-window" >
+ <div class="search-header">
+ <div class="search-input-container">
+ <input autocomplete="off" autocapitalize="off" maxlength="80"
+ placeholder="Search Anything" spellcheck="false"
+ type="search" class="search-input">
+ </div>
+ <div class="search-close-btn">
+ <div class="icon close-btn"></div>
+ </div>
+ </div>
+ <div class="search-result-container">
+ </div>
+ </div>
+</div>
+
+<script>
+ const searchConfig = {
+ path : "/search.xml",
+ top_n_per_article: "1",
+ unescape : "false",
+ trigger: "auto",
+ preload: "false"
+ }
+</script>
+<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/search.js"></script>
+<script src="/js/search.js"></script>
+
+
+
+ </body>
+</html>