summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormuqiuhan <[email protected]>2025-05-27 06:01:58 +0000
committermuqiuhan <[email protected]>2025-05-27 06:01:58 +0000
commitbb19987062af9a28aa5dea93cc0eba9ac3a7e1ab (patch)
treef27730c063509967a84142e05accedd1ebbfd914
parentd1431025ce827dc7ae210e0e16e0ac17be808e77 (diff)
downloadblog-bb19987062af9a28aa5dea93cc0eba9ac3a7e1ab.tar.gz
deploy: 2f6742a2297dec9a8e2f8452e542c6f18472ae0e
-rw-r--r--2025/05/12/二〇二五年五月十二日/index.html5
-rw-r--r--2025/05/27/vertical-slicing-practice/index.html323
-rw-r--r--archives/2025/05/index.html18
-rw-r--r--archives/2025/index.html36
-rw-r--r--archives/2025/page/2/index.html36
-rw-r--r--archives/2025/page/3/index.html18
-rw-r--r--archives/index.html36
-rw-r--r--archives/page/10/index.html36
-rw-r--r--archives/page/11/index.html36
-rw-r--r--archives/page/12/index.html36
-rw-r--r--archives/page/13/index.html18
-rw-r--r--archives/page/2/index.html36
-rw-r--r--archives/page/3/index.html36
-rw-r--r--archives/page/4/index.html36
-rw-r--r--archives/page/5/index.html36
-rw-r--r--archives/page/6/index.html36
-rw-r--r--archives/page/7/index.html36
-rw-r--r--archives/page/8/index.html36
-rw-r--r--archives/page/9/index.html36
-rw-r--r--search.xml46
-rw-r--r--tags/Technique/index.html36
-rw-r--r--tags/Technique/page/2/index.html36
-rw-r--r--tags/Technique/page/3/index.html36
-rw-r--r--tags/Technique/page/4/index.html36
-rw-r--r--tags/Technique/page/5/index.html18
25 files changed, 770 insertions, 324 deletions
diff --git a/2025/05/12/二〇二五年五月十二日/index.html b/2025/05/12/二〇二五年五月十二日/index.html
index f94a2ffe..96eba633 100644
--- a/2025/05/12/二〇二五年五月十二日/index.html
+++ b/2025/05/12/二〇二五年五月十二日/index.html
@@ -214,6 +214,11 @@
<nav class="post-nav">
<div class="prev-item">
+ <div class="icon arrow-left"></div>
+ <div class="post-link">
+ <a href="/2025/05/27/vertical-slicing-practice/">Prev</a>
+ </div>
+
</div>
<div class="next-item">
diff --git a/2025/05/27/vertical-slicing-practice/index.html b/2025/05/27/vertical-slicing-practice/index.html
new file mode 100644
index 00000000..325c7a76
--- /dev/null
+++ b/2025/05/27/vertical-slicing-practice/index.html
@@ -0,0 +1,323 @@
+<!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>
+
+ Vertical slicing 在开发中的实践探索 |
+ 暮秋小屋
+ </title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+ <style>
+ @font-face {
+ font-family: CarroisSong;
+ src: url('/fonts/CarroisSong.ttf');
+ }
+ </style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script
+ src="/js/menu.js"></script>
+
+
+
+
+
+ <script
+ src="https://polyfill.alicdn.com/polyfill.js?features=es6"></script>
+ <script
+ id="MathJax-script"
+ async
+ src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/mathjax/3.2.0/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="/archives">
+ 全部
+ </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">
+
+
+ Vertical slicing 在开发中的实践探索
+
+
+ </div>
+ <span class="post-date">
+ May 27, 2025
+ </span>
+ </div>
+ <div class="post-img">
+
+ <div class="h-line-primary"></div>
+
+ </div>
+</div>
+ <div class="post-content">
+ <p><strong>垂直切片 (Vertical Slicing)</strong> 是一种在敏捷软件开发中将产品需求(通常是用户故事)拆分为可独立交付的、具有端到端功能的小块的方法。这意味着每个“切片”都包含了从用户界面 (UI) 到底层数据库,以及中间所有业务逻辑层所需的工作。</p>
+<p>与水平切片(即按技术分层,如先完成所有 UI,再完成所有后端逻辑)不同,垂直切片的目标是尽快交付一个虽小但完整可用的功能。</p>
+<hr>
+<p>想象一个蛋糕,垂直切片就像切下一块完整的蛋糕,包含从顶部到底部的每一层。在软件开发中,这意味着一个任务或用户故事的完成会涉及到:</p>
+<ul>
+<li>**用户界面 (UI)**:用户能看到并与之交互的部分。</li>
+<li>**业务逻辑层 (Business Logic Layer)**:处理数据和执行核心功能的部分。</li>
+<li>**数据访问层 (Data Access Layer)**:与数据库或其他数据存储交互的部分。</li>
+<li>**数据库 (Database)**:存储数据的部分。</li>
+</ul>
+<p>所以一个垂直切片代表了一个可以独立运行、测试和向用户展示的小功能。</p>
+<hr>
+<p>在实践中,用垂直切片进行任务拆分或许可以按照如下步骤来实现:</p>
+<p>一、**从用户故事开始 (Start with User Stories)**:明确用户需要什么功能以及这个功能为用户带来的价值。例如:“作为一个注册用户,我希望能用我的邮箱和密码登录系统,以便访问我的个人资料。”</p>
+<p>二、<strong>识别涉及的技术层面 (Identify Affected Layers)</strong></p>
+<p>对于登录功能,需要考虑:</p>
+<ul>
+<li><strong>UI 层</strong>:登录表单(输入邮箱、密码的地方)、提交按钮、错误提示信息。</li>
+<li><strong>API&#x2F;服务层</strong>:接收登录请求、验证用户凭证的接口。</li>
+<li><strong>业务逻辑层</strong>:校验输入格式、查询用户信息、验证密码、生成会话(Session)或令牌(Token)。</li>
+<li><strong>数据访问层</strong>:从数据库中读取用户信息。</li>
+</ul>
+<p>三、<strong>创建可交付的小功能块 (Create Small, Deliverable Chunks)</strong></p>
+<p>就是将一个大的用户故事拆分成更小的、但仍然是垂直的、可独立交付的故事。例如,可以将“用户登录”进一步细化:</p>
+<p>**切片1 (基础登录)**:用户可以使用正确的邮箱和密码成功登录。这包含了 UI 输入、后端验证和数据库查询。</p>
+<p>**切片2 (错误处理)**:用户输入错误的邮箱或密码时,系统给出明确的错误提示。这可能只涉及 UI 和业务逻辑层的少量修改。</p>
+<p>**切片3 (“记住我” 功能)**:用户可以选择“记住我”,下次访问时自动登录。这可能涉及 UI、业务逻辑和客户端存储。</p>
+<p>四、**确保每个切片都有价值 (Ensure Each Slice Has Value)**:每完成一个切片,都应该为用户或产品带来可感知的价值,并且理想情况下是可以演示给利益相关者看的。</p>
+<p>五、**保持切片足够小 (Keep Slices Small Enough)**:每个切片的工作量应该小到可以在一个迭代周期(例如 Sprint)内完成。这有助于团队保持专注,并快速获得反馈。</p>
+<hr>
+<p>这里有一些拆分技巧:</p>
+<ul>
+<li><strong>按操作流程拆分</strong>:例如,一个复杂的表单提交可以先实现基本信息的提交,后续再添加高级选项的提交。</li>
+<li><strong>按业务规则拆分</strong>:先实现核心的业务规则,再逐步添加次要的或复杂的规则。</li>
+<li><strong>按数据类型或参数拆分</strong>:先支持一种数据类型或最常用的参数,再扩展到其他类型。</li>
+<li><strong>按用户角色或权限拆分</strong>:先实现某个核心角色的功能,再实现其他角色的特定功能。</li>
+<li><strong>简化错误处理或用户体验</strong>:先实现基本功能,再完善错误处理和用户体验细节。</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>
+ <div class="next-item">
+
+ <div class="icon arrow-right"></div>
+ <div class="post-link">
+ <a href="/2025/05/12/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E4%BA%8C%E6%97%A5/">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>
diff --git a/archives/2025/05/index.html b/archives/2025/05/index.html
index ffdfe2a0..183dd0d8 100644
--- a/archives/2025/05/index.html
+++ b/archives/2025/05/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/05/27/vertical-slicing-practice/">
+
+ Vertical slicing 在开发中的实践探索
+
+ </a>
+ </div>
+
+ <span class="post-date">May 27, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/05/12/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E4%BA%8C%E6%97%A5/">
二〇二五年五月十二日
diff --git a/archives/2025/index.html b/archives/2025/index.html
index 9b2117f0..f173a758 100644
--- a/archives/2025/index.html
+++ b/archives/2025/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/05/27/vertical-slicing-practice/">
+
+ Vertical slicing 在开发中的实践探索
+
+ </a>
+ </div>
+
+ <span class="post-date">May 27, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/05/12/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E4%BA%8C%E6%97%A5/">
二〇二五年五月十二日
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/03/25/Scala-3-Capture-Checking/">
-
- Scala 3 (Capture Checking)
-
- </a>
- </div>
-
- <span class="post-date">Mar 25, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/2025/page/2/index.html b/archives/2025/page/2/index.html
index 013ab556..4e8902ce 100644
--- a/archives/2025/page/2/index.html
+++ b/archives/2025/page/2/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/03/25/Scala-3-Capture-Checking/">
+
+ Scala 3 (Capture Checking)
+
+ </a>
+ </div>
+
+ <span class="post-date">Mar 25, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/03/20/TDD-%E5%92%8C-DDD-%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B0%8F%E6%83%B3%E6%B3%95/">
TDD 和 DDD 的一些小想法
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/02/11/%E4%BB%8E%E4%BA%8B%E4%BB%B6%E9%A3%8E%E6%9A%B4%E7%9C%8B%E9%A2%86%E5%9F%9F%E9%A9%B1%E5%8A%A8%E8%AE%BE%E8%AE%A1/">
-
- 从事件风暴看领域驱动设计
-
- </a>
- </div>
-
- <span class="post-date">Feb 11, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/2025/page/3/index.html b/archives/2025/page/3/index.html
index a793ceb1..0970bd72 100644
--- a/archives/2025/page/3/index.html
+++ b/archives/2025/page/3/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/02/11/%E4%BB%8E%E4%BA%8B%E4%BB%B6%E9%A3%8E%E6%9A%B4%E7%9C%8B%E9%A2%86%E5%9F%9F%E9%A9%B1%E5%8A%A8%E8%AE%BE%E8%AE%A1/">
+
+ 从事件风暴看领域驱动设计
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 11, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<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/">
实时搜索中的防抖函数
diff --git a/archives/index.html b/archives/index.html
index 39c3e7a7..72efab35 100644
--- a/archives/index.html
+++ b/archives/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/05/27/vertical-slicing-practice/">
+
+ Vertical slicing 在开发中的实践探索
+
+ </a>
+ </div>
+
+ <span class="post-date">May 27, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/05/12/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E4%BA%8C%E6%97%A5/">
二〇二五年五月十二日
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/03/25/Scala-3-Capture-Checking/">
-
- Scala 3 (Capture Checking)
-
- </a>
- </div>
-
- <span class="post-date">Mar 25, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/10/index.html b/archives/page/10/index.html
index f80b8165..d1922825 100644
--- a/archives/page/10/index.html
+++ b/archives/page/10/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/06/28/%E9%9A%90%E8%97%8F%E4%B8%80%E4%BA%9BOCaml-Effect%E7%9A%84%E6%9C%BA%E5%88%B6%EF%BC%8C%E8%AE%A9%E5%85%B6%E8%AF%AD%E6%B3%95%E5%9C%A8%E7%B2%BE%E7%A5%9E%E4%B8%8A%E6%9B%B4%E6%8E%A5%E8%BF%91delimcc/">
+
+ 隐藏一些OCaml Effect的机制,让其语法在精神上更接近delimcc
+
+ </a>
+ </div>
+
+ <span class="post-date">Jun 28, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/06/28/caml-release-runtime-system%E5%AF%BC%E8%87%B4%E7%9A%84%E6%AD%BB%E9%94%81%E9%97%AE%E9%A2%98/">
caml_release_runtime_system导致的死锁问题
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/04/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
-
- 二零二三年四月二十五日
-
- </a>
- </div>
-
- <span class="post-date">Apr 25, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/11/index.html b/archives/page/11/index.html
index 9efc3215..e0a54f6b 100644
--- a/archives/page/11/index.html
+++ b/archives/page/11/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/04/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
+
+ 二零二三年四月二十五日
+
+ </a>
+ </div>
+
+ <span class="post-date">Apr 25, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/04/22/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%8C%E6%97%A5/">
二零二三年四月二十二日
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/02/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
-
- 二零二三年二月二十五日
-
- </a>
- </div>
-
- <span class="post-date">Feb 25, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/12/index.html b/archives/page/12/index.html
index 9440216f..e01ff7da 100644
--- a/archives/page/12/index.html
+++ b/archives/page/12/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/02/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
+
+ 二零二三年二月二十五日
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 25, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/02/24/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E5%9B%9B%E6%97%A5/">
二零二三年二月二十四日
@@ -327,24 +345,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2022/08/21/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/">
-
- 二零二二年八月二十一日
-
- </a>
- </div>
-
- <span class="post-date">Aug 21, 2022</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/13/index.html b/archives/page/13/index.html
index 141f5a46..f9dbf7fe 100644
--- a/archives/page/13/index.html
+++ b/archives/page/13/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2022/08/21/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/">
+
+ 二零二二年八月二十一日
+
+ </a>
+ </div>
+
+ <span class="post-date">Aug 21, 2022</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2022/03/14/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E4%B8%89%E6%9C%88%E5%8D%81%E5%9B%9B%E6%97%A5/">
二零二二年三月十四日
diff --git a/archives/page/2/index.html b/archives/page/2/index.html
index feed9d12..4f9f5c8b 100644
--- a/archives/page/2/index.html
+++ b/archives/page/2/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/03/25/Scala-3-Capture-Checking/">
+
+ Scala 3 (Capture Checking)
+
+ </a>
+ </div>
+
+ <span class="post-date">Mar 25, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/03/20/TDD-%E5%92%8C-DDD-%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B0%8F%E6%83%B3%E6%B3%95/">
TDD 和 DDD 的一些小想法
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/02/11/%E4%BB%8E%E4%BA%8B%E4%BB%B6%E9%A3%8E%E6%9A%B4%E7%9C%8B%E9%A2%86%E5%9F%9F%E9%A9%B1%E5%8A%A8%E8%AE%BE%E8%AE%A1/">
-
- 从事件风暴看领域驱动设计
-
- </a>
- </div>
-
- <span class="post-date">Feb 11, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/3/index.html b/archives/page/3/index.html
index abf7d468..cb7f94d8 100644
--- a/archives/page/3/index.html
+++ b/archives/page/3/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/02/11/%E4%BB%8E%E4%BA%8B%E4%BB%B6%E9%A3%8E%E6%9A%B4%E7%9C%8B%E9%A2%86%E5%9F%9F%E9%A9%B1%E5%8A%A8%E8%AE%BE%E8%AE%A1/">
+
+ 从事件风暴看领域驱动设计
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 11, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<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/">
实时搜索中的防抖函数
@@ -327,24 +345,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/">
-
- Dealing with complex dependency injection in FSharp
-
- </a>
- </div>
-
- <span class="post-date">Oct 18, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/4/index.html b/archives/page/4/index.html
index 28b1ad4a..cbec90a7 100644
--- a/archives/page/4/index.html
+++ b/archives/page/4/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/">
+
+ Dealing with complex dependency injection in FSharp
+
+ </a>
+ </div>
+
+ <span class="post-date">Oct 18, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/10/06/Obsidian-Vault-%E7%9A%84-obsidian-%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%90%84%E6%96%87%E4%BB%B6%E4%BD%9C%E7%94%A8/">
Obsidian Vault 的 .obsidian 目录中的各文件作用
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/09/01/%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E6%B0%B4%E5%92%8C%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E5%8F%A3%E6%9C%8D%E6%B6%B2%E7%9A%84%E5%8C%BA%E5%88%AB/">
-
- 藿香正气水和藿香正气口服液的区别
-
- </a>
- </div>
-
- <span class="post-date">Sep 1, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/5/index.html b/archives/page/5/index.html
index b044e0b5..e0932058 100644
--- a/archives/page/5/index.html
+++ b/archives/page/5/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/09/01/%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E6%B0%B4%E5%92%8C%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E5%8F%A3%E6%9C%8D%E6%B6%B2%E7%9A%84%E5%8C%BA%E5%88%AB/">
+
+ 藿香正气水和藿香正气口服液的区别
+
+ </a>
+ </div>
+
+ <span class="post-date">Sep 1, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/08/12/%E7%9B%B4%E7%B3%BB%E8%A1%80%E4%BA%B2%E4%B9%8B%E9%97%B4%E4%B8%8D%E8%83%BD%E7%9B%B4%E6%8E%A5%E8%BE%93%E8%A1%80/">
直系血亲之间不能直接输血
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/05/16/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E5%85%AD%E6%97%A5/">
-
- 二〇二四年五月十六日
-
- </a>
- </div>
-
- <span class="post-date">May 16, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/6/index.html b/archives/page/6/index.html
index 582b38f7..6923ceab 100644
--- a/archives/page/6/index.html
+++ b/archives/page/6/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/05/16/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E5%85%AD%E6%97%A5/">
+
+ 二〇二四年五月十六日
+
+ </a>
+ </div>
+
+ <span class="post-date">May 16, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/05/13/%E7%BB%99%E5%B0%B8%E4%BD%93%E4%B8%8A-ECMO-%E5%B9%B6%E7%BB%B4%E6%8C%81%E5%BF%83%E8%B7%B3/">
给尸体上 ECMO 并维持心跳
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/01/23/%E6%85%A2%E6%80%A7%E8%82%BA%E6%BA%90%E6%80%A7%E5%BF%83%E8%84%8F%E7%97%85/">
-
- 慢性肺源性心脏病
-
- </a>
- </div>
-
- <span class="post-date">Jan 23, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/7/index.html b/archives/page/7/index.html
index 5bd4d0a6..923f9169 100644
--- a/archives/page/7/index.html
+++ b/archives/page/7/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/01/23/%E6%85%A2%E6%80%A7%E8%82%BA%E6%BA%90%E6%80%A7%E5%BF%83%E8%84%8F%E7%97%85/">
+
+ 慢性肺源性心脏病
+
+ </a>
+ </div>
+
+ <span class="post-date">Jan 23, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/01/23/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%B8%80%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%89%E6%97%A5/">
二〇二四年一月二十三日
@@ -327,24 +345,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/11/06/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E5%85%AD%E6%97%A5/">
-
- 二零二三年十一月六日
-
- </a>
- </div>
-
- <span class="post-date">Nov 6, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/8/index.html b/archives/page/8/index.html
index e7380ef6..ece7b350 100644
--- a/archives/page/8/index.html
+++ b/archives/page/8/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/11/06/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E5%85%AD%E6%97%A5/">
+
+ 二零二三年十一月六日
+
+ </a>
+ </div>
+
+ <span class="post-date">Nov 6, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/10/25/%E5%84%BF%E7%AB%A5%E6%96%B0%E5%9E%8B%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92Omicron%E6%A0%AA%E5%92%8C%E8%82%BA%E7%82%8E%E6%94%AF%E5%8E%9F%E4%BD%93%E6%B7%B7%E5%90%88%E6%84%9F%E6%9F%93%E9%87%8D%E7%97%87%E8%82%BA%E7%82%8E1%E4%BE%8B/">
儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/09/28/A-Brief-History-of-Just-In-Time/">
-
- A Brief History of Just-In-Time
-
- </a>
- </div>
-
- <span class="post-date">Sep 28, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/9/index.html b/archives/page/9/index.html
index c28b053a..4bfa4486 100644
--- a/archives/page/9/index.html
+++ b/archives/page/9/index.html
@@ -170,6 +170,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/09/28/A-Brief-History-of-Just-In-Time/">
+
+ A Brief History of Just-In-Time
+
+ </a>
+ </div>
+
+ <span class="post-date">Sep 28, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/09/13/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%B9%9D%E6%9C%88%E5%8D%81%E4%B8%89%E6%97%A5/">
二零二三年九月十三日
@@ -325,24 +343,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/06/28/%E9%9A%90%E8%97%8F%E4%B8%80%E4%BA%9BOCaml-Effect%E7%9A%84%E6%9C%BA%E5%88%B6%EF%BC%8C%E8%AE%A9%E5%85%B6%E8%AF%AD%E6%B3%95%E5%9C%A8%E7%B2%BE%E7%A5%9E%E4%B8%8A%E6%9B%B4%E6%8E%A5%E8%BF%91delimcc/">
-
- 隐藏一些OCaml Effect的机制,让其语法在精神上更接近delimcc
-
- </a>
- </div>
-
- <span class="post-date">Jun 28, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/search.xml b/search.xml
index efb8f322..0ed243fe 100644
--- a/search.xml
+++ b/search.xml
@@ -2672,6 +2672,52 @@ await prisma.$transaction(async tx =&gt; &#123;
</tags>
</entry>
<entry>
+ <title>Vertical slicing 在开发中的实践探索</title>
+ <url>/2025/05/27/vertical-slicing-practice/</url>
+ <content><![CDATA[<p><strong>垂直切片 (Vertical Slicing)</strong> 是一种在敏捷软件开发中将产品需求(通常是用户故事)拆分为可独立交付的、具有端到端功能的小块的方法。这意味着每个“切片”都包含了从用户界面 (UI) 到底层数据库,以及中间所有业务逻辑层所需的工作。</p>
+<p>与水平切片(即按技术分层,如先完成所有 UI,再完成所有后端逻辑)不同,垂直切片的目标是尽快交付一个虽小但完整可用的功能。</p>
+<hr>
+<p>想象一个蛋糕,垂直切片就像切下一块完整的蛋糕,包含从顶部到底部的每一层。在软件开发中,这意味着一个任务或用户故事的完成会涉及到:</p>
+<ul>
+<li>**用户界面 (UI)**:用户能看到并与之交互的部分。</li>
+<li>**业务逻辑层 (Business Logic Layer)**:处理数据和执行核心功能的部分。</li>
+<li>**数据访问层 (Data Access Layer)**:与数据库或其他数据存储交互的部分。</li>
+<li>**数据库 (Database)**:存储数据的部分。</li>
+</ul>
+<p>所以一个垂直切片代表了一个可以独立运行、测试和向用户展示的小功能。</p>
+<hr>
+<p>在实践中,用垂直切片进行任务拆分或许可以按照如下步骤来实现:</p>
+<p>一、**从用户故事开始 (Start with User Stories)**:明确用户需要什么功能以及这个功能为用户带来的价值。例如:“作为一个注册用户,我希望能用我的邮箱和密码登录系统,以便访问我的个人资料。”</p>
+<p>二、<strong>识别涉及的技术层面 (Identify Affected Layers)</strong></p>
+<p>对于登录功能,需要考虑:</p>
+<ul>
+<li><strong>UI 层</strong>:登录表单(输入邮箱、密码的地方)、提交按钮、错误提示信息。</li>
+<li><strong>API&#x2F;服务层</strong>:接收登录请求、验证用户凭证的接口。</li>
+<li><strong>业务逻辑层</strong>:校验输入格式、查询用户信息、验证密码、生成会话(Session)或令牌(Token)。</li>
+<li><strong>数据访问层</strong>:从数据库中读取用户信息。</li>
+</ul>
+<p>三、<strong>创建可交付的小功能块 (Create Small, Deliverable Chunks)</strong></p>
+<p>就是将一个大的用户故事拆分成更小的、但仍然是垂直的、可独立交付的故事。例如,可以将“用户登录”进一步细化:</p>
+<p>**切片1 (基础登录)**:用户可以使用正确的邮箱和密码成功登录。这包含了 UI 输入、后端验证和数据库查询。</p>
+<p>**切片2 (错误处理)**:用户输入错误的邮箱或密码时,系统给出明确的错误提示。这可能只涉及 UI 和业务逻辑层的少量修改。</p>
+<p>**切片3 (“记住我” 功能)**:用户可以选择“记住我”,下次访问时自动登录。这可能涉及 UI、业务逻辑和客户端存储。</p>
+<p>四、**确保每个切片都有价值 (Ensure Each Slice Has Value)**:每完成一个切片,都应该为用户或产品带来可感知的价值,并且理想情况下是可以演示给利益相关者看的。</p>
+<p>五、**保持切片足够小 (Keep Slices Small Enough)**:每个切片的工作量应该小到可以在一个迭代周期(例如 Sprint)内完成。这有助于团队保持专注,并快速获得反馈。</p>
+<hr>
+<p>这里有一些拆分技巧:</p>
+<ul>
+<li><strong>按操作流程拆分</strong>:例如,一个复杂的表单提交可以先实现基本信息的提交,后续再添加高级选项的提交。</li>
+<li><strong>按业务规则拆分</strong>:先实现核心的业务规则,再逐步添加次要的或复杂的规则。</li>
+<li><strong>按数据类型或参数拆分</strong>:先支持一种数据类型或最常用的参数,再扩展到其他类型。</li>
+<li><strong>按用户角色或权限拆分</strong>:先实现某个核心角色的功能,再实现其他角色的特定功能。</li>
+<li><strong>简化错误处理或用户体验</strong>:先实现基本功能,再完善错误处理和用户体验细节。</li>
+</ul>
+]]></content>
+ <tags>
+ <tag>Technique</tag>
+ </tags>
+ </entry>
+ <entry>
<title>中老年人沉迷手机的问题</title>
<url>/2024/09/08/%E4%B8%AD%E8%80%81%E5%B9%B4%E4%BA%BA%E6%B2%89%E8%BF%B7%E6%89%8B%E6%9C%BA%E7%9A%84%E9%97%AE%E9%A2%98/</url>
<content><![CDATA[<p>沉迷于手机的老年人,其实很多都是因为儿女不在身边,他们只能把这份孤独转嫁到手机上。</p>
diff --git a/tags/Technique/index.html b/tags/Technique/index.html
index 944b7e4b..f1152283 100644
--- a/tags/Technique/index.html
+++ b/tags/Technique/index.html
@@ -177,6 +177,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/05/27/vertical-slicing-practice/">
+
+ Vertical slicing 在开发中的实践探索
+
+ </a>
+ </div>
+
+ <span class="post-date">May 27, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/05/08/Multiplayer-Collaborative-Systems-tips/">
多人协作系统中的实现策略 (CRDT,锁等实现方案)
@@ -332,24 +350,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/03/19/%E9%A2%86%E5%9F%9F%E9%A9%B1%E5%8A%A8%E8%AE%BE%E8%AE%A1%E4%B8%AD%E8%81%9A%E5%90%88%E6%A0%B9%E6%8C%81%E4%B9%85%E5%8C%96%E5%92%8C%E4%BA%8B%E4%BB%B6%E5%8F%91%E5%B8%83%E5%8F%AF%E8%83%BD%E5%AF%BC%E8%87%B4%E6%95%B0%E6%8D%AE%E4%B8%8D%E4%B8%80%E8%87%B4%E9%97%AE%E9%A2%98/">
-
- 领域驱动设计中聚合根持久化和事件发布可能导致数据不一致问题
-
- </a>
- </div>
-
- <span class="post-date">Mar 19, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/tags/Technique/page/2/index.html b/tags/Technique/page/2/index.html
index e2e87289..90bb0d88 100644
--- a/tags/Technique/page/2/index.html
+++ b/tags/Technique/page/2/index.html
@@ -177,6 +177,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/03/19/%E9%A2%86%E5%9F%9F%E9%A9%B1%E5%8A%A8%E8%AE%BE%E8%AE%A1%E4%B8%AD%E8%81%9A%E5%90%88%E6%A0%B9%E6%8C%81%E4%B9%85%E5%8C%96%E5%92%8C%E4%BA%8B%E4%BB%B6%E5%8F%91%E5%B8%83%E5%8F%AF%E8%83%BD%E5%AF%BC%E8%87%B4%E6%95%B0%E6%8D%AE%E4%B8%8D%E4%B8%80%E8%87%B4%E9%97%AE%E9%A2%98/">
+
+ 领域驱动设计中聚合根持久化和事件发布可能导致数据不一致问题
+
+ </a>
+ </div>
+
+ <span class="post-date">Mar 19, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/03/14/DDD-%E4%B8%AD%E7%9A%84-Ubiquitous-Languages/">
DDD 中的 Ubiquitous Language
@@ -334,24 +352,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/">
-
- Dealing with complex dependency injection in FSharp
-
- </a>
- </div>
-
- <span class="post-date">Oct 18, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/tags/Technique/page/3/index.html b/tags/Technique/page/3/index.html
index fe0bbff3..83bccfda 100644
--- a/tags/Technique/page/3/index.html
+++ b/tags/Technique/page/3/index.html
@@ -177,6 +177,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/">
+
+ Dealing with complex dependency injection in FSharp
+
+ </a>
+ </div>
+
+ <span class="post-date">Oct 18, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/10/06/Obsidian-Vault-%E7%9A%84-obsidian-%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%90%84%E6%96%87%E4%BB%B6%E4%BD%9C%E7%94%A8/">
Obsidian Vault 的 .obsidian 目录中的各文件作用
@@ -332,24 +350,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/04/03/shadow-cljs-proxy/">
-
- shadow-cljs 怎么设置代理
-
- </a>
- </div>
-
- <span class="post-date">Apr 3, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/tags/Technique/page/4/index.html b/tags/Technique/page/4/index.html
index 250074bc..cd26a40a 100644
--- a/tags/Technique/page/4/index.html
+++ b/tags/Technique/page/4/index.html
@@ -177,6 +177,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/04/03/shadow-cljs-proxy/">
+
+ shadow-cljs 怎么设置代理
+
+ </a>
+ </div>
+
+ <span class="post-date">Apr 3, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/02/26/OCaml-News-2024-3/">
OCaml News 2024-3
@@ -334,24 +352,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/08/15/poll-error-attribute-in-OCaml/">
-
- 使用 [@poll error] 实现线程安全的数据结构
-
- </a>
- </div>
-
- <span class="post-date">Aug 15, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/tags/Technique/page/5/index.html b/tags/Technique/page/5/index.html
index d025bc32..3eaa8aba 100644
--- a/tags/Technique/page/5/index.html
+++ b/tags/Technique/page/5/index.html
@@ -177,6 +177,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/08/15/poll-error-attribute-in-OCaml/">
+
+ 使用 [@poll error] 实现线程安全的数据结构
+
+ </a>
+ </div>
+
+ <span class="post-date">Aug 15, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/">
WiscKey: Separating Keys from Values in SSD-conscious Storage