From 8fdca49e1d63db1075a23958ff23189818a49d6c Mon Sep 17 00:00:00 2001 From: muqiuhan Date: Thu, 13 Mar 2025 09:18:34 +0000 Subject: deploy: 11fd5b5345c11055a7c18e9b2c0baa4d2787fe15 --- .../index.html" | 2 +- .../index.html" | 287 +++++++++++++++++++++ .../index.html" | 277 ++++++++++++++++++++ .../index.html" | 2 +- .../index.html" | 5 + .../index.html" | 282 ++++++++++++++++++++ 6 files changed, 853 insertions(+), 2 deletions(-) create mode 100644 "2025/02/10/\345\256\236\346\227\266\346\220\234\347\264\242\344\270\255\347\232\204\351\230\262\346\212\226\345\207\275\346\225\260/index.html" create mode 100644 "2025/02/11/\344\273\216\344\272\213\344\273\266\351\243\216\346\232\264\347\234\213\351\242\206\345\237\237\351\251\261\345\212\250\350\256\276\350\256\241/index.html" create mode 100644 "2025/03/13/\351\242\206\345\237\237\351\251\261\345\212\250\350\256\276\350\256\241\344\270\255\347\232\204\342\200\234\350\201\232\345\220\210\346\240\271\342\200\235/index.html" (limited to '2025') diff --git "a/2025/01/19/\350\272\253\344\275\223\345\276\200\345\211\215\345\200\276\357\274\214\347\201\265\351\255\202\345\220\221\345\220\216\346\221\207/index.html" "b/2025/01/19/\350\272\253\344\275\223\345\276\200\345\211\215\345\200\276\357\274\214\347\201\265\351\255\202\345\220\221\345\220\216\346\221\207/index.html" index 6abbd905..53f1ff70 100644 --- "a/2025/01/19/\350\272\253\344\275\223\345\276\200\345\211\215\345\200\276\357\274\214\347\201\265\351\255\202\345\220\221\345\220\216\346\221\207/index.html" +++ "b/2025/01/19/\350\272\253\344\275\223\345\276\200\345\211\215\345\200\276\357\274\214\347\201\265\351\255\202\345\220\221\345\220\216\346\221\207/index.html" @@ -190,7 +190,7 @@
- Prev + Prev
diff --git "a/2025/02/10/\345\256\236\346\227\266\346\220\234\347\264\242\344\270\255\347\232\204\351\230\262\346\212\226\345\207\275\346\225\260/index.html" "b/2025/02/10/\345\256\236\346\227\266\346\220\234\347\264\242\344\270\255\347\232\204\351\230\262\346\212\226\345\207\275\346\225\260/index.html" new file mode 100644 index 00000000..614e7b9c --- /dev/null +++ "b/2025/02/10/\345\256\236\346\227\266\346\220\234\347\264\242\344\270\255\347\232\204\351\230\262\346\212\226\345\207\275\346\225\260/index.html" @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + + + + +实时搜索中的防抖函数 | 暮秋小屋 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+ +
+ +
+ +
+
+
+

在实现实时搜索功能时,通常会使用输入框的事件监听器来捕获用户的输入变化,并在输入变化时发送搜索请求。为了避免过多的请求导致服务器负担过重,通常会使用“防抖”(debounce)技术来控制请求的频率。

+

实现步骤

    +
  1. 监听输入框的变化:使用input事件监听器来捕获用户的输入变化。
  2. +
  3. 防抖处理:使用防抖函数来限制请求的频率。防抖函数会在用户停止输入一段时间后才发送请求。
  4. +
  5. 发送请求:在防抖函数中调用搜索请求。
  6. +
+

防抖函数示例

以下是一个简单的防抖函数示例:

+
1
2
3
4
5
6
7
8
function debounce(func, wait) {
let timeout;
return function(...args) {
const context = this;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), wait);
};
}
+ +

实现实时搜索

假设你有一个输入框用于搜索患者:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<script>
import { onMount } from 'svelte';
import { patientsStore } from '$lib/stores/patients.svelte';

let searchTerm = '';

// 防抖函数
function debounce(func, wait) {
let timeout;
return function(...args) {
const context = this;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), wait);
};
}

// 搜索函数
const searchPatients = debounce(async (term) => {
if (term) {
// 发送搜索请求
const response = await fetch(`/api/search-patients?query=${term}`);
const data = await response.json();
patientsStore.mbglPatients = data;
} else {
// 清空搜索结果或恢复默认数据
patientsStore.mbglPatients = [];
}
}, 300); // 300ms 的防抖时间

// 监听输入框变化
function handleInput(event) {
searchTerm = event.target.value;
searchPatients(searchTerm);
}
</script>

<input type="text" placeholder="搜索患者..." on:input={handleInput} bind:value={searchTerm} />
+ +

请求发送间隔

    +
  • 防抖时间:通常设置为 300ms 到 500ms 之间。这个时间足够让用户完成输入并减少不必要的请求。
  • +
  • 考虑用户体验:防抖时间过短可能导致过多请求,过长则可能让用户感到延迟。300ms 是一个常用的折中值。
  • +
+

通过这种方式,你可以实现一个高效的实时搜索功能,既能保证用户体验,又能减少服务器的负担。

+ +
+ + + + + +
+ + + + + + + +
+ + +
+
+
+ + + +
+ + +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + diff --git "a/2025/02/11/\344\273\216\344\272\213\344\273\266\351\243\216\346\232\264\347\234\213\351\242\206\345\237\237\351\251\261\345\212\250\350\256\276\350\256\241/index.html" "b/2025/02/11/\344\273\216\344\272\213\344\273\266\351\243\216\346\232\264\347\234\213\351\242\206\345\237\237\351\251\261\345\212\250\350\256\276\350\256\241/index.html" new file mode 100644 index 00000000..d7d6ef41 --- /dev/null +++ "b/2025/02/11/\344\273\216\344\272\213\344\273\266\351\243\216\346\232\264\347\234\213\351\242\206\345\237\237\351\251\261\345\212\250\350\256\276\350\256\241/index.html" @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + +从事件风暴看领域驱动设计 | 暮秋小屋 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+ +
+ +
+ +
+
+
+

事件风暴(Event Storming)是一种领域驱动设计(DDD)的实践方法,由 Alberto Brandolini 提出,旨在通过团队协作的方式快速理解和建模业务领域。

+

以下是事件风暴及相关领域驱动设计中的一些核心概念和知识点:

+

1. 领域(Domain):指的是业务相关知识的集合,可以进一步划分为子域。
2. 子域(Subdomain):是领域的一部分,可以是核心域、支撑域或通用域。
3. 核心域(Core Domain):指领域中最核心的部分,通常对应企业的核心业务。
4. 通用语言(Ubiquitous Language):团队所有成员使用的一种语言,用于确保业务和软件之间的沟通一致性。
5. 限界上下文(Bounded Context):定义了一组规则和协议,用于明确领域模型的适用范围。
6. 实体(Entity):具有唯一标识和生命周期的领域对象。
7. 值对象(Value Object):描述了某种特性或属性的对象,没有概念标识。
8. 聚合(Aggregate):一组相关对象的集合,由一个聚合根(Aggregate Root)统一管理。
9. 领域事件(Domain Event):领域中发生的重要事件,可以用于通知其他领域对象或跨限界上下文进行解耦和协作。
10. 命令(Command):表示要执行的操作,通常与事件一一对应。
11. 读模型(Read Model):为了优化读取操作而设计的模型,可能与写模型不同。
12. 决策命令(Decision Command):在事件风暴中,直接导致事件发生的命令。
13. 战略设计(Strategic Design):高层次的抽象和归类,包括理清上下文和子域的划分。
14. 战术设计(Tactical Design):对特定上下文下的模型进行详细设计,包括聚合、实体和值对象。
15. 贫血模型(Anemic Domain Model):领域对象只有属性及其getter/setter方法的纯数据类,业务逻辑通过服务实现。
16. 充血模型(Rich Domain Model):领域对象包含业务逻辑,每个对象都是活跃的。
17. 资源库(Repository):用于检索和持久化领域对象的机制。
18. 服务(Service):在模型中独立的操作,可以是领域服务或应用服务。
19. 固定规则(Invariant):为设计元素做出的断言,必须一直保持为真。

+

事件风暴通常包括以下步骤:

+
    +
  • 识别领域事件
  • +
  • 确定事件顺序
  • +
  • 识别命令和触发器
  • +
  • 识别聚合和实体
  • +
  • 划分限界上下文
  • +
  • 识别领域服务和资源库
  • +
  • 通过这些步骤,团队可以共同创建出反映业务领域的领域模型,为软件设计和开发提供指导。
  • +
+ +
+ + + + + +
+ + + + + + + +
+ + +
+
+
+ + + +
+ + +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + diff --git "a/2025/02/18/Prisma-\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223\347\232\204-Self-relations/index.html" "b/2025/02/18/Prisma-\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223\347\232\204-Self-relations/index.html" index c4c33004..d5523d01 100644 --- "a/2025/02/18/Prisma-\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223\347\232\204-Self-relations/index.html" +++ "b/2025/02/18/Prisma-\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223\347\232\204-Self-relations/index.html" @@ -267,7 +267,7 @@
- Next + Next
diff --git "a/2025/02/24/\344\272\214\343\200\207\344\272\214\344\272\224\345\271\264\344\272\214\346\234\210\344\272\214\345\215\201\345\233\233\346\227\245/index.html" "b/2025/02/24/\344\272\214\343\200\207\344\272\214\344\272\224\345\271\264\344\272\214\346\234\210\344\272\214\345\215\201\345\233\233\346\227\245/index.html" index 04392f68..ec7102ef 100644 --- "a/2025/02/24/\344\272\214\343\200\207\344\272\214\344\272\224\345\271\264\344\272\214\346\234\210\344\272\214\345\215\201\345\233\233\346\227\245/index.html" +++ "b/2025/02/24/\344\272\214\343\200\207\344\272\214\344\272\224\345\271\264\344\272\214\346\234\210\344\272\214\345\215\201\345\233\233\346\227\245/index.html" @@ -173,6 +173,11 @@