From d583a9dc930ba250135ca795c5207f8343ba7411 Mon Sep 17 00:00:00 2001 From: muqiuhan Date: Thu, 20 Mar 2025 10:09:58 +0000 Subject: deploy: 951ed14c0cac247fa7f1e571c9fe27442d10dd26 --- .../index.html | 6 - .../index.html" | 6 - .../index.html" | 6 - .../index.html" | 6 - .../index.html" | 6 - .../index.html" | 6 - .../index.html" | 6 - .../index.html | 6 - .../08/15/poll-error-attribute-in-OCaml/index.html | 6 - .../index.html" | 6 - .../28/A-Brief-History-of-Just-In-Time/index.html | 6 - .../index.html" | 6 - 2024/01/08/OCaml-News-2024-1/index.html | 6 - 2024/01/18/OCaml-News-2024-2/index.html | 6 - 2024/01/22/Rescript-React-Native/index.html | 6 - 2024/02/26/OCaml-News-2024-3/index.html | 6 - 2024/04/03/shadow-cljs-proxy/index.html | 10 +- .../index.html" | 6 - .../index.html" | 6 - 2024/06/27/OCaml-News-2024-5/index.html | 6 - 2024/07/01/OCaml-News-2024-4/index.html | 6 - 2024/07/23/OCaml-News-2024-6/index.html | 6 - .../index.html | 6 - .../index.html | 6 - .../Turborepo-\347\256\200\350\277\260/index.html" | 6 - .../index.html" | 6 - .../index.html | 6 - .../index.html | 6 - .../index.html | 6 - 2024/12/15/OCaml-News-2024-7/index.html | 6 - .../index.html" | 6 - .../index.html" | 18 - .../19/Repository-pattern-in-Typescript/index.html | 18 - .../index.html" | 8 +- .../index.html" | 284 +++++++++++++++ .../index.html" | 2 +- .../index.html" | 5 + .../index.html" | 286 +++++++++++++++ .../index.html" | 306 ++++++++++++++++ archives/2025/03/index.html | 54 +++ archives/2025/index.html | 79 ++-- archives/2025/page/2/index.html | 243 +++++++++++++ archives/index.html | 62 ++-- archives/page/10/index.html | 60 ++-- archives/page/11/index.html | 66 ++-- archives/page/12/index.html | 56 +++ archives/page/2/index.html | 64 ++-- archives/page/3/index.html | 60 ++-- archives/page/4/index.html | 60 ++-- archives/page/5/index.html | 60 ++-- archives/page/6/index.html | 64 ++-- archives/page/7/index.html | 60 ++-- archives/page/8/index.html | 60 ++-- archives/page/9/index.html | 60 ++-- search.xml | 190 +++++++--- tag/index.html | 84 ----- tags/Clojure/index.html | 229 ------------ tags/ClojureScript/index.html | 229 ------------ tags/Compilation/index.html | 229 ------------ tags/Database/index.html | 249 ------------- tags/F/index.html | 301 ---------------- tags/Medicine/index.html | 38 +- tags/Medicine/page/2/index.html | 36 +- tags/Medicine/page/3/index.html | 18 + tags/OCaml/index.html | 400 --------------------- tags/OCaml/page/2/index.html | 272 -------------- tags/Obsidian/index.html | 229 ------------ tags/Rescript/index.html | 247 ------------- tags/Rust/index.html | 283 --------------- tags/Software-Engineering/index.html | 229 ------------ tags/Technique/index.html | 62 ++-- tags/Technique/page/2/index.html | 60 ++-- tags/Technique/page/3/index.html | 64 ++-- tags/Technique/page/4/index.html | 54 +++ tags/TypeScript/index.html | 229 ------------ tags/Typescript/index.html | 247 ------------- tags/Web/index.html | 285 --------------- 77 files changed, 1961 insertions(+), 4528 deletions(-) create mode 100644 "2025/03/14/DDD-\344\270\255\347\232\204-Ubiquitous-Languages/index.html" create mode 100644 "2025/03/20/TDD-\345\222\214-DDD-\347\232\204\344\270\200\344\272\233\345\260\217\346\203\263\346\263\225/index.html" create mode 100644 "2025/03/20/\350\202\272\345\212\237\350\203\275\346\243\200\346\237\245\346\225\260\345\200\274/index.html" create mode 100644 archives/2025/page/2/index.html delete mode 100644 tags/Clojure/index.html delete mode 100644 tags/ClojureScript/index.html delete mode 100644 tags/Compilation/index.html delete mode 100644 tags/Database/index.html delete mode 100644 tags/F/index.html delete mode 100644 tags/OCaml/index.html delete mode 100644 tags/OCaml/page/2/index.html delete mode 100644 tags/Obsidian/index.html delete mode 100644 tags/Rescript/index.html delete mode 100644 tags/Rust/index.html delete mode 100644 tags/Software-Engineering/index.html delete mode 100644 tags/TypeScript/index.html delete mode 100644 tags/Typescript/index.html delete mode 100644 tags/Web/index.html diff --git a/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html b/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html index f9153b89..f837011a 100644 --- a/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html +++ b/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html @@ -146,12 +146,6 @@ Technique - - - - TypeScript - - diff --git "a/2023/05/01/Rust-\350\231\232\350\241\250\345\270\203\345\261\200\350\247\204\345\210\231\344\273\213\347\273\215/index.html" "b/2023/05/01/Rust-\350\231\232\350\241\250\345\270\203\345\261\200\350\247\204\345\210\231\344\273\213\347\273\215/index.html" index df8e1567..ac339ad0 100644 --- "a/2023/05/01/Rust-\350\231\232\350\241\250\345\270\203\345\261\200\350\247\204\345\210\231\344\273\213\347\273\215/index.html" +++ "b/2023/05/01/Rust-\350\231\232\350\241\250\345\270\203\345\261\200\350\247\204\345\210\231\344\273\213\347\273\215/index.html" @@ -146,12 +146,6 @@ Technique - - - - Rust - - diff --git "a/2023/05/02/Rust-Partial-\350\257\255\344\271\211/index.html" "b/2023/05/02/Rust-Partial-\350\257\255\344\271\211/index.html" index a8ffd9a3..22cd9713 100644 --- "a/2023/05/02/Rust-Partial-\350\257\255\344\271\211/index.html" +++ "b/2023/05/02/Rust-Partial-\350\257\255\344\271\211/index.html" @@ -146,12 +146,6 @@ Technique - - - - Rust - - diff --git "a/2023/05/03/Rust-NewType-\346\250\241\345\274\217/index.html" "b/2023/05/03/Rust-NewType-\346\250\241\345\274\217/index.html" index 3c515743..050bd7b8 100644 --- "a/2023/05/03/Rust-NewType-\346\250\241\345\274\217/index.html" +++ "b/2023/05/03/Rust-NewType-\346\250\241\345\274\217/index.html" @@ -146,12 +146,6 @@ Technique - - - - Rust - - diff --git "a/2023/05/24/Rust-\351\227\255\345\214\205-lifetime-may-not-live-long-enough-\351\227\256\351\242\230/index.html" "b/2023/05/24/Rust-\351\227\255\345\214\205-lifetime-may-not-live-long-enough-\351\227\256\351\242\230/index.html" index 21a0f1f5..b77b3306 100644 --- "a/2023/05/24/Rust-\351\227\255\345\214\205-lifetime-may-not-live-long-enough-\351\227\256\351\242\230/index.html" +++ "b/2023/05/24/Rust-\351\227\255\345\214\205-lifetime-may-not-live-long-enough-\351\227\256\351\242\230/index.html" @@ -146,12 +146,6 @@ Technique - - - - Rust - - diff --git "a/2023/06/28/caml-release-runtime-system\345\257\274\350\207\264\347\232\204\346\255\273\351\224\201\351\227\256\351\242\230/index.html" "b/2023/06/28/caml-release-runtime-system\345\257\274\350\207\264\347\232\204\346\255\273\351\224\201\351\227\256\351\242\230/index.html" index d3942a5e..a6524ec3 100644 --- "a/2023/06/28/caml-release-runtime-system\345\257\274\350\207\264\347\232\204\346\255\273\351\224\201\351\227\256\351\242\230/index.html" +++ "b/2023/06/28/caml-release-runtime-system\345\257\274\350\207\264\347\232\204\346\255\273\351\224\201\351\227\256\351\242\230/index.html" @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git "a/2023/06/28/\351\232\220\350\227\217\344\270\200\344\272\233OCaml-Effect\347\232\204\346\234\272\345\210\266\357\274\214\350\256\251\345\205\266\350\257\255\346\263\225\345\234\250\347\262\276\347\245\236\344\270\212\346\233\264\346\216\245\350\277\221delimcc/index.html" "b/2023/06/28/\351\232\220\350\227\217\344\270\200\344\272\233OCaml-Effect\347\232\204\346\234\272\345\210\266\357\274\214\350\256\251\345\205\266\350\257\255\346\263\225\345\234\250\347\262\276\347\245\236\344\270\212\346\233\264\346\216\245\350\277\221delimcc/index.html" index 43fbf390..c679410b 100644 --- "a/2023/06/28/\351\232\220\350\227\217\344\270\200\344\272\233OCaml-Effect\347\232\204\346\234\272\345\210\266\357\274\214\350\256\251\345\205\266\350\257\255\346\263\225\345\234\250\347\262\276\347\245\236\344\270\212\346\233\264\346\216\245\350\277\221delimcc/index.html" +++ "b/2023/06/28/\351\232\220\350\227\217\344\270\200\344\272\233OCaml-Effect\347\232\204\346\234\272\345\210\266\357\274\214\350\256\251\345\205\266\350\257\255\346\263\225\345\234\250\347\262\276\347\245\236\344\270\212\346\233\264\346\216\245\350\277\221delimcc/index.html" @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git a/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html b/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html index d5f21f60..0c3585bb 100644 --- a/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html +++ b/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html @@ -146,12 +146,6 @@ Technique - - - - Database - - diff --git a/2023/08/15/poll-error-attribute-in-OCaml/index.html b/2023/08/15/poll-error-attribute-in-OCaml/index.html index f7f80f25..a60e4931 100644 --- a/2023/08/15/poll-error-attribute-in-OCaml/index.html +++ b/2023/08/15/poll-error-attribute-in-OCaml/index.html @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git "a/2023/08/15/tick-thread\345\234\250Multicore-OCaml\344\270\255\347\232\204\344\275\234\347\224\250/index.html" "b/2023/08/15/tick-thread\345\234\250Multicore-OCaml\344\270\255\347\232\204\344\275\234\347\224\250/index.html" index 02daf4d0..7e1d9333 100644 --- "a/2023/08/15/tick-thread\345\234\250Multicore-OCaml\344\270\255\347\232\204\344\275\234\347\224\250/index.html" +++ "b/2023/08/15/tick-thread\345\234\250Multicore-OCaml\344\270\255\347\232\204\344\275\234\347\224\250/index.html" @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git a/2023/09/28/A-Brief-History-of-Just-In-Time/index.html b/2023/09/28/A-Brief-History-of-Just-In-Time/index.html index 5f7622a2..5f2f33fe 100644 --- a/2023/09/28/A-Brief-History-of-Just-In-Time/index.html +++ b/2023/09/28/A-Brief-History-of-Just-In-Time/index.html @@ -146,12 +146,6 @@ Technique - - - - Compilation - - diff --git "a/2023/10/21/OCaml-Core-Int-pow-\347\232\204\345\256\236\347\216\260/index.html" "b/2023/10/21/OCaml-Core-Int-pow-\347\232\204\345\256\236\347\216\260/index.html" index 1ac5caba..2afaad4a 100644 --- "a/2023/10/21/OCaml-Core-Int-pow-\347\232\204\345\256\236\347\216\260/index.html" +++ "b/2023/10/21/OCaml-Core-Int-pow-\347\232\204\345\256\236\347\216\260/index.html" @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git a/2024/01/08/OCaml-News-2024-1/index.html b/2024/01/08/OCaml-News-2024-1/index.html index 8e8518ac..d0c1234d 100644 --- a/2024/01/08/OCaml-News-2024-1/index.html +++ b/2024/01/08/OCaml-News-2024-1/index.html @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git a/2024/01/18/OCaml-News-2024-2/index.html b/2024/01/18/OCaml-News-2024-2/index.html index e63b5885..2dd70094 100644 --- a/2024/01/18/OCaml-News-2024-2/index.html +++ b/2024/01/18/OCaml-News-2024-2/index.html @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git a/2024/01/22/Rescript-React-Native/index.html b/2024/01/22/Rescript-React-Native/index.html index 615cbdb5..f1afa7ef 100644 --- a/2024/01/22/Rescript-React-Native/index.html +++ b/2024/01/22/Rescript-React-Native/index.html @@ -146,12 +146,6 @@ Technique - - - - Rescript - - diff --git a/2024/02/26/OCaml-News-2024-3/index.html b/2024/02/26/OCaml-News-2024-3/index.html index 2ff366b0..0fafe30c 100644 --- a/2024/02/26/OCaml-News-2024-3/index.html +++ b/2024/02/26/OCaml-News-2024-3/index.html @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git a/2024/04/03/shadow-cljs-proxy/index.html b/2024/04/03/shadow-cljs-proxy/index.html index 474fb839..91b77fff 100644 --- a/2024/04/03/shadow-cljs-proxy/index.html +++ b/2024/04/03/shadow-cljs-proxy/index.html @@ -142,14 +142,8 @@ - - Clojure - - - - - - ClojureScript + + Technique diff --git "a/2024/05/20/Rescript-genType-import-\351\227\256\351\242\230/index.html" "b/2024/05/20/Rescript-genType-import-\351\227\256\351\242\230/index.html" index 83f5563f..5fce50e1 100644 --- "a/2024/05/20/Rescript-genType-import-\351\227\256\351\242\230/index.html" +++ "b/2024/05/20/Rescript-genType-import-\351\227\256\351\242\230/index.html" @@ -146,12 +146,6 @@ Technique - - - - Rescript - - diff --git "a/2024/06/06/NET-AOT-\344\270\213\347\232\204-F-\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\350\247\243\346\236\220\345\272\223\351\200\211\346\213\251/index.html" "b/2024/06/06/NET-AOT-\344\270\213\347\232\204-F-\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\350\247\243\346\236\220\345\272\223\351\200\211\346\213\251/index.html" index 611c82da..1dd27be9 100644 --- "a/2024/06/06/NET-AOT-\344\270\213\347\232\204-F-\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\350\247\243\346\236\220\345\272\223\351\200\211\346\213\251/index.html" +++ "b/2024/06/06/NET-AOT-\344\270\213\347\232\204-F-\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\350\247\243\346\236\220\345\272\223\351\200\211\346\213\251/index.html" @@ -146,12 +146,6 @@ Technique - - - - F# - - diff --git a/2024/06/27/OCaml-News-2024-5/index.html b/2024/06/27/OCaml-News-2024-5/index.html index f747403d..b3711f1f 100644 --- a/2024/06/27/OCaml-News-2024-5/index.html +++ b/2024/06/27/OCaml-News-2024-5/index.html @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git a/2024/07/01/OCaml-News-2024-4/index.html b/2024/07/01/OCaml-News-2024-4/index.html index 10413198..d8e9fc43 100644 --- a/2024/07/01/OCaml-News-2024-4/index.html +++ b/2024/07/01/OCaml-News-2024-4/index.html @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git a/2024/07/23/OCaml-News-2024-6/index.html b/2024/07/23/OCaml-News-2024-6/index.html index 219cd283..5c8886f0 100644 --- a/2024/07/23/OCaml-News-2024-6/index.html +++ b/2024/07/23/OCaml-News-2024-6/index.html @@ -146,12 +146,6 @@ Technique - - - - OCaml - - diff --git a/2024/09/12/Functional-Reactive-Programming-in-F/index.html b/2024/09/12/Functional-Reactive-Programming-in-F/index.html index 5a7c6d19..51d9c7cc 100644 --- a/2024/09/12/Functional-Reactive-Programming-in-F/index.html +++ b/2024/09/12/Functional-Reactive-Programming-in-F/index.html @@ -147,12 +147,6 @@ - - - F# - - - Archive diff --git a/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/index.html b/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/index.html index aeb25b06..4cd98035 100644 --- a/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/index.html +++ b/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/index.html @@ -152,12 +152,6 @@ Archive - - - - OCaml - - diff --git "a/2024/09/27/Turborepo-\347\256\200\350\277\260/index.html" "b/2024/09/27/Turborepo-\347\256\200\350\277\260/index.html" index cb3a5cba..188be631 100644 --- "a/2024/09/27/Turborepo-\347\256\200\350\277\260/index.html" +++ "b/2024/09/27/Turborepo-\347\256\200\350\277\260/index.html" @@ -146,12 +146,6 @@ Technique - - - - Web - - diff --git "a/2024/10/06/Obsidian-Vault-\347\232\204-obsidian-\347\233\256\345\275\225\344\270\255\347\232\204\345\220\204\346\226\207\344\273\266\344\275\234\347\224\250/index.html" "b/2024/10/06/Obsidian-Vault-\347\232\204-obsidian-\347\233\256\345\275\225\344\270\255\347\232\204\345\220\204\346\226\207\344\273\266\344\275\234\347\224\250/index.html" index b1379fba..d4642a90 100644 --- "a/2024/10/06/Obsidian-Vault-\347\232\204-obsidian-\347\233\256\345\275\225\344\270\255\347\232\204\345\220\204\346\226\207\344\273\266\344\275\234\347\224\250/index.html" +++ "b/2024/10/06/Obsidian-Vault-\347\232\204-obsidian-\347\233\256\345\275\225\344\270\255\347\232\204\345\220\204\346\226\207\344\273\266\344\275\234\347\224\250/index.html" @@ -146,12 +146,6 @@ Technique - - - - Obsidian - - diff --git a/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/index.html b/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/index.html index 12628764..7ef3bc1f 100644 --- a/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/index.html +++ b/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/index.html @@ -147,12 +147,6 @@ - - - F# - - - Archive diff --git a/2024/10/18/Building-custom-fibers-library-in-FSharp/index.html b/2024/10/18/Building-custom-fibers-library-in-FSharp/index.html index cbf3071a..1715b52d 100644 --- a/2024/10/18/Building-custom-fibers-library-in-FSharp/index.html +++ b/2024/10/18/Building-custom-fibers-library-in-FSharp/index.html @@ -147,12 +147,6 @@ - - - F# - - - Archive diff --git a/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/index.html b/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/index.html index 624fe3f3..74db6135 100644 --- a/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/index.html +++ b/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/index.html @@ -147,12 +147,6 @@ - - - F# - - - Archive diff --git a/2024/12/15/OCaml-News-2024-7/index.html b/2024/12/15/OCaml-News-2024-7/index.html index 0bc4f54a..6886bf6c 100644 --- a/2024/12/15/OCaml-News-2024-7/index.html +++ b/2024/12/15/OCaml-News-2024-7/index.html @@ -146,12 +146,6 @@ Technique - - - - OCaml - - 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" index 3dd4c273..76369555 100644 --- "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" @@ -146,12 +146,6 @@ Technique - - - - Web - - 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 fef22ae8..07feb856 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" @@ -146,24 +146,6 @@ Technique - - - - Web - - - - - - Typescript - - - - - - Database - - diff --git a/2025/02/19/Repository-pattern-in-Typescript/index.html b/2025/02/19/Repository-pattern-in-Typescript/index.html index e8a622a5..d5a0b590 100644 --- a/2025/02/19/Repository-pattern-in-Typescript/index.html +++ b/2025/02/19/Repository-pattern-in-Typescript/index.html @@ -146,24 +146,6 @@ Technique - - - - Web - - - - - - Typescript - - - - - - Software-Engineering - - diff --git "a/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" "b/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" index f873f090..9d5309c5 100644 --- "a/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" +++ "b/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" @@ -146,12 +146,6 @@ Technique - - - - Software Engineering - - @@ -203,7 +197,7 @@
- Prev + Prev
diff --git "a/2025/03/14/DDD-\344\270\255\347\232\204-Ubiquitous-Languages/index.html" "b/2025/03/14/DDD-\344\270\255\347\232\204-Ubiquitous-Languages/index.html" new file mode 100644 index 00000000..2916b4d3 --- /dev/null +++ "b/2025/03/14/DDD-\344\270\255\347\232\204-Ubiquitous-Languages/index.html" @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + +DDD 中的 Ubiquitous Language | 暮秋小屋 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+
+ + + +
+
+
+ + + +
+
+
+ + +
+ +
+ +
+ +
+
+
+

Ubiquitous Language(通用语言)是 Domain-Driven Design (DDD) 中的一个核心概念。它是一种共享的、统一的语言,用于描述和讨论领域模型中的概念和规则。Ubiquitous Language 的目的是确保开发团队和业务专家之间的沟通更加高效和准确,从而减少误解和错误。

+

一般来说,Ubiquitous Language 有以下特点:

+
    +
  1. 共享:Ubiquitous Language 是由开发团队和业务专家共同创建和使用的。它不仅用于代码和文档,还用于日常的沟通和讨论。
  2. +
  3. 统一:在整个项目中,Ubiquitous Language 应该是一致的。无论是在代码、文档、会议还是白板上,都应该使用相同的术语和概念。
  4. +
  5. 精确:Ubiquitous Language 应该尽可能精确,避免模糊和歧义。每个术语都应该有明确的定义和含义。
  6. +
  7. 演进:Ubiquitous Language 是动态的,会随着项目的进展和业务需求的变化而演进。团队应该定期审查和更新它。
  8. +
+

基于此,它可以用在这些地方:

+
    +
  1. 命名:在代码中使用 Ubiquitous Language 来命名类、方法、变量等。例如,如果业务专家使用“订单”来描述一个概念,那么在代码中也应该使用“Order”而不是“Purchase”或“Transaction”。
  2. +
  3. 文档:在文档中使用 Ubiquitous Language 来描述系统的设计、架构和功能。这有助于业务专家更容易理解技术文档。
  4. +
  5. 沟通:在团队会议、讨论和白板会议中使用 Ubiquitous Language。这有助于确保所有参与者都在讨论同一个概念。
  6. +
  7. 测试:在编写测试用例时,使用 Ubiquitous Language 来描述测试的前提条件、步骤和预期结果。这有助于确保测试覆盖了业务需求。
  8. +
+

假设正在开发一个电子商务系统,业务专家使用“订单”来描述用户购买的商品集合。团队可以在代码中使用“Order”来命名相关的类和方法:

+
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
type Order = {
items: OrderItem list
customer: Customer
orderDate: DateTime
}

type OrderItem = {
product: Product
quantity: int
}

type Customer = {
name: string
}

type Product = {
name: string
price: float
}

let addItem (order: Order) (item: OrderItem) =
{ order with items = order.items @ [item] }

let getTotalAmount (order: Order) =
let total = 0.0
for item in order.items do
total <- total + item.price
total

let getPrice (item: OrderItem) =
item.product.price * item.quantity

let getTotalPrice (order: Order) =
let total = 0.0
for item in order.items do
total <- total + getPrice(item)
total
+ +

在这个示例中使用了“Order”、“OrderItem”、“Customer”和“Product”等术语,这些术语都是 Ubiquitous Language 的一部分,可以提高代码与业务需求的一致性。

+ +
+ + + + + +
+ + + + + + + +
+ + +
+
+
+ + + +
+ + +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + diff --git "a/2025/03/17/\344\272\214\343\200\207\344\272\214\344\272\224\345\271\264\344\270\211\346\234\210\345\215\201\344\270\203\346\227\245/index.html" "b/2025/03/17/\344\272\214\343\200\207\344\272\214\344\272\224\345\271\264\344\270\211\346\234\210\345\215\201\344\270\203\346\227\245/index.html" index 581b94b2..b2bb83a9 100644 --- "a/2025/03/17/\344\272\214\343\200\207\344\272\214\344\272\224\345\271\264\344\270\211\346\234\210\345\215\201\344\270\203\346\227\245/index.html" +++ "b/2025/03/17/\344\272\214\343\200\207\344\272\214\344\272\224\345\271\264\344\270\211\346\234\210\345\215\201\344\270\203\346\227\245/index.html" @@ -303,7 +303,7 @@ mjx-container[display="true"] + br {
- Next + Next
diff --git "a/2025/03/19/\351\242\206\345\237\237\351\251\261\345\212\250\350\256\276\350\256\241\344\270\255\350\201\232\345\220\210\346\240\271\346\214\201\344\271\205\345\214\226\345\222\214\344\272\213\344\273\266\345\217\221\345\270\203\345\217\257\350\203\275\345\257\274\350\207\264\346\225\260\346\215\256\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230/index.html" "b/2025/03/19/\351\242\206\345\237\237\351\251\261\345\212\250\350\256\276\350\256\241\344\270\255\350\201\232\345\220\210\346\240\271\346\214\201\344\271\205\345\214\226\345\222\214\344\272\213\344\273\266\345\217\221\345\270\203\345\217\257\350\203\275\345\257\274\350\207\264\346\225\260\346\215\256\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230/index.html" index 6aa2f2cf..0fed5232 100644 --- "a/2025/03/19/\351\242\206\345\237\237\351\251\261\345\212\250\350\256\276\350\256\241\344\270\255\350\201\232\345\220\210\346\240\271\346\214\201\344\271\205\345\214\226\345\222\214\344\272\213\344\273\266\345\217\221\345\270\203\345\217\257\350\203\275\345\257\274\350\207\264\346\225\260\346\215\256\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230/index.html" +++ "b/2025/03/19/\351\242\206\345\237\237\351\251\261\345\212\250\350\256\276\350\256\241\344\270\255\350\201\232\345\220\210\346\240\271\346\214\201\344\271\205\345\214\226\345\222\214\344\272\213\344\273\266\345\217\221\345\270\203\345\217\257\350\203\275\345\257\274\350\207\264\346\225\260\346\215\256\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230/index.html" @@ -217,6 +217,11 @@