diff --git a/package-lock.json b/package-lock.json index 9663943..b0f8215 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,12 +10,12 @@ "dependencies": { "@astrojs/check": "^0.9.4", "@astrojs/db": "^0.14.6", - "@astrojs/mdx": "^4.0.7", + "@astrojs/mdx": "^4.0.8", "@astrojs/rss": "^4.0.11", "@astrojs/sitemap": "^3.2.1", - "@astrojs/tailwind": "^5.1.5", + "@astrojs/tailwind": "^6.0.0", "@astrojs/vue": "^5.0.6", - "astro": "^5.1.10", + "astro": "^5.3.0", "tailwindcss": "^3.4.17", "typescript": "^5.7.3", "vue": "^3.5.13", @@ -105,9 +105,9 @@ } }, "node_modules/@astrojs/internal-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmmirror.com/@astrojs/internal-helpers/-/internal-helpers-0.4.2.tgz", - "integrity": "sha512-EdDWkC3JJVcpGpqJAU/5hSk2LKXyG3mNGkzGoAuyK+xoPHbaVdSuIWoN1QTnmK3N/gGfaaAfM8gO2KDCAW7S3w==", + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/@astrojs/internal-helpers/-/internal-helpers-0.5.1.tgz", + "integrity": "sha512-M7rAge1n2+aOSxNvKUFa0u/KFn0W+sZy7EW91KOSERotm2Ti8qs+1K0xx3zbOxtAVrmJb5/J98eohVvvEqtNkw==", "license": "MIT" }, "node_modules/@astrojs/language-server": { @@ -152,9 +152,9 @@ } }, "node_modules/@astrojs/markdown-remark": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/@astrojs/markdown-remark/-/markdown-remark-6.0.2.tgz", - "integrity": "sha512-aAoHGVRK3rebCYbaLjyyR+3VeAuTz4q49syUxJP29Oo5yZHdy4cCAXRqLBdr9mJVlxCUUjZiF0Dau6YBf65SGg==", + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/@astrojs/markdown-remark/-/markdown-remark-6.1.0.tgz", + "integrity": "sha512-emZNNSTPGgPc3V399Cazpp5+snogjaF04ocOSQn9vy3Kw/eIC4vTQjXOrWDEoSEy+AwPDZX9bQ4wd3bxhpmGgQ==", "license": "MIT", "dependencies": { "@astrojs/prism": "3.2.0", @@ -170,7 +170,8 @@ "remark-parse": "^11.0.0", "remark-rehype": "^11.1.1", "remark-smartypants": "^3.0.2", - "shiki": "^1.26.2", + "shiki": "^1.29.1", + "smol-toml": "^1.3.1", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", @@ -179,12 +180,12 @@ } }, "node_modules/@astrojs/mdx": { - "version": "4.0.7", - "resolved": "https://registry.npmmirror.com/@astrojs/mdx/-/mdx-4.0.7.tgz", - "integrity": "sha512-d3PopBTbbCoX3QOmSLYXW6YCZ0dkhNaeP9/Liz9BhEekflMc9IvBjbtNFf1WCEatsl4LLGftyDisfMM3F3LGMA==", + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/@astrojs/mdx/-/mdx-4.0.8.tgz", + "integrity": "sha512-/aiLr2yQ55W9AbpyOgfMtFXk7g2t7XoWdC2Avps/NqxAx4aYONDLneX43D79QwgqdjFhin7o3cIPp/vVppMbaA==", "license": "MIT", "dependencies": { - "@astrojs/markdown-remark": "6.0.2", + "@astrojs/markdown-remark": "6.1.0", "@mdx-js/mdx": "^3.1.0", "acorn": "^8.14.0", "es-module-lexer": "^1.6.0", @@ -250,9 +251,9 @@ } }, "node_modules/@astrojs/tailwind": { - "version": "5.1.5", - "resolved": "https://registry.npmmirror.com/@astrojs/tailwind/-/tailwind-5.1.5.tgz", - "integrity": "sha512-1diguZEau7FZ9vIjzE4BwavGdhD3+JkdS8zmibl1ene+EHgIU5hI0NMgRYG3yea+Niaf7cyMwjeWeLvzq/maxg==", + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/@astrojs/tailwind/-/tailwind-6.0.0.tgz", + "integrity": "sha512-GbEK2/h0nvY8i6g1GZT5ddHAgj71lQIf34/j7+jPLhUti3xDxKcWElApDe2jWvqAaKl2oKEh045ITSm8mU9BVQ==", "license": "MIT", "dependencies": { "autoprefixer": "^10.4.20", @@ -2351,62 +2352,62 @@ "license": "MIT" }, "node_modules/@shikijs/core": { - "version": "1.29.1", - "resolved": "https://registry.npmmirror.com/@shikijs/core/-/core-1.29.1.tgz", - "integrity": "sha512-Mo1gGGkuOYjDu5H8YwzmOuly9vNr8KDVkqj9xiKhhhFS8jisAtDSEWB9hzqRHLVQgFdA310e8XRJcW4tYhRB2A==", + "version": "1.29.2", + "resolved": "https://registry.npmmirror.com/@shikijs/core/-/core-1.29.2.tgz", + "integrity": "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==", "license": "MIT", "dependencies": { - "@shikijs/engine-javascript": "1.29.1", - "@shikijs/engine-oniguruma": "1.29.1", - "@shikijs/types": "1.29.1", + "@shikijs/engine-javascript": "1.29.2", + "@shikijs/engine-oniguruma": "1.29.2", + "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "node_modules/@shikijs/engine-javascript": { - "version": "1.29.1", - "resolved": "https://registry.npmmirror.com/@shikijs/engine-javascript/-/engine-javascript-1.29.1.tgz", - "integrity": "sha512-Hpi8k9x77rCQ7F/7zxIOUruNkNidMyBnP5qAGbLFqg4kRrg1HZhkB8btib5EXbQWTtLb5gBHOdBwshk20njD7Q==", + "version": "1.29.2", + "resolved": "https://registry.npmmirror.com/@shikijs/engine-javascript/-/engine-javascript-1.29.2.tgz", + "integrity": "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==", "license": "MIT", "dependencies": { - "@shikijs/types": "1.29.1", + "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "oniguruma-to-es": "^2.2.0" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "1.29.1", - "resolved": "https://registry.npmmirror.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.1.tgz", - "integrity": "sha512-gSt2WhLNgEeLstcweQOSp+C+MhOpTsgdNXRqr3zP6M+BUBZ8Md9OU2BYwUYsALBxHza7hwaIWtFHjQ/aOOychw==", + "version": "1.29.2", + "resolved": "https://registry.npmmirror.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz", + "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==", "license": "MIT", "dependencies": { - "@shikijs/types": "1.29.1", + "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1" } }, "node_modules/@shikijs/langs": { - "version": "1.29.1", - "resolved": "https://registry.npmmirror.com/@shikijs/langs/-/langs-1.29.1.tgz", - "integrity": "sha512-iERn4HlyuT044/FgrvLOaZgKVKf3PozjKjyV/RZ5GnlyYEAZFcgwHGkYboeBv2IybQG1KVS/e7VGgiAU4JY2Gw==", + "version": "1.29.2", + "resolved": "https://registry.npmmirror.com/@shikijs/langs/-/langs-1.29.2.tgz", + "integrity": "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "1.29.1" + "@shikijs/types": "1.29.2" } }, "node_modules/@shikijs/themes": { - "version": "1.29.1", - "resolved": "https://registry.npmmirror.com/@shikijs/themes/-/themes-1.29.1.tgz", - "integrity": "sha512-lb11zf72Vc9uxkl+aec2oW1HVTHJ2LtgZgumb4Rr6By3y/96VmlU44bkxEb8WBWH3RUtbqAJEN0jljD9cF7H7g==", + "version": "1.29.2", + "resolved": "https://registry.npmmirror.com/@shikijs/themes/-/themes-1.29.2.tgz", + "integrity": "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==", "license": "MIT", "dependencies": { - "@shikijs/types": "1.29.1" + "@shikijs/types": "1.29.2" } }, "node_modules/@shikijs/types": { - "version": "1.29.1", - "resolved": "https://registry.npmmirror.com/@shikijs/types/-/types-1.29.1.tgz", - "integrity": "sha512-aBqAuhYRp5vSir3Pc9+QPu9WESBOjUo03ao0IHLC4TyTioSsp/SkbAZSrIH4ghYYC1T1KTEpRSBa83bas4RnPA==", + "version": "1.29.2", + "resolved": "https://registry.npmmirror.com/@shikijs/types/-/types-1.29.2.tgz", + "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.1", @@ -3059,14 +3060,14 @@ } }, "node_modules/astro": { - "version": "5.1.10", - "resolved": "https://registry.npmmirror.com/astro/-/astro-5.1.10.tgz", - "integrity": "sha512-qFu4jC7BRlhwHgk9Pa1sTQWw60zYWlriNTt6bMGMKkPxCd4Dd84fGn+NjbrJ/JeKwF7YXX0gY1saDF/RS6TMVA==", + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/astro/-/astro-5.3.0.tgz", + "integrity": "sha512-e88l/Yk/6enR/ZDddLbqtM+oblBFk5mneNSmNesyVYGL/6Dj4UA67GPAZOk79VxT5dbLlclZSyyw/wlxN1aj3A==", "license": "MIT", "dependencies": { "@astrojs/compiler": "^2.10.3", - "@astrojs/internal-helpers": "0.4.2", - "@astrojs/markdown-remark": "6.0.2", + "@astrojs/internal-helpers": "0.5.1", + "@astrojs/markdown-remark": "6.1.0", "@astrojs/telemetry": "3.2.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.1.4", @@ -3092,7 +3093,7 @@ "fast-glob": "^3.3.3", "flattie": "^1.1.1", "github-slugger": "^2.0.0", - "html-escaper": "^3.0.3", + "html-escaper": "3.0.3", "http-cache-semantics": "^4.1.1", "js-yaml": "^4.1.0", "kleur": "^4.1.5", @@ -3102,24 +3103,24 @@ "mrmime": "^2.0.0", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", - "p-queue": "^8.0.1", - "preferred-pm": "^4.0.0", + "p-queue": "^8.1.0", + "preferred-pm": "^4.1.1", "prompts": "^2.4.2", "rehype": "^13.0.2", - "semver": "^7.6.3", - "shiki": "^1.29.1", + "semver": "^7.7.1", + "shiki": "^1.29.2", "tinyexec": "^0.3.2", "tsconfck": "^3.1.4", "ultrahtml": "^1.5.3", "unist-util-visit": "^5.0.0", "unstorage": "^1.14.4", "vfile": "^6.0.3", - "vite": "^6.0.9", + "vite": "^6.0.11", "vitefu": "^1.0.5", - "which-pm": "^3.0.0", + "which-pm": "^3.0.1", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", - "yocto-spinner": "^0.1.2", + "yocto-spinner": "^0.2.0", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.1", "zod-to-ts": "^1.2.0" @@ -3141,9 +3142,9 @@ } }, "node_modules/astro/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3152,6 +3153,21 @@ "node": ">=10" } }, + "node_modules/astro/node_modules/yocto-spinner": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/yocto-spinner/-/yocto-spinner-0.2.0.tgz", + "integrity": "sha512-Qu6WAqNLGleB687CCGcmgHIo8l+J19MX/32UrSMfbf/4L8gLoxjpOYoiHT1asiWyqvjRZbgvOhLlvne6E5Tbdw==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/async-listen": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/async-listen/-/async-listen-3.0.1.tgz", @@ -7276,30 +7292,31 @@ } }, "node_modules/preferred-pm": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/preferred-pm/-/preferred-pm-4.0.0.tgz", - "integrity": "sha512-gYBeFTZLu055D8Vv3cSPox/0iTPtkzxpLroSYYA7WXgRi31WCJ51Uyl8ZiPeUUjyvs2MBzK+S8v9JVUgHU/Sqw==", + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/preferred-pm/-/preferred-pm-4.1.1.tgz", + "integrity": "sha512-rU+ZAv1Ur9jAUZtGPebQVQPzdGhNzaEiQ7VL9+cjsAWPHFYOccNXPNiev1CCDSOg/2j7UujM7ojNhpkuILEVNQ==", "license": "MIT", "dependencies": { "find-up-simple": "^1.0.0", "find-yarn-workspace-root2": "1.2.16", - "which-pm": "^3.0.0" + "which-pm": "^3.0.1" }, "engines": { "node": ">=18.12" } }, "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "version": "3.5.1", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.5.1.tgz", + "integrity": "sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==", "license": "MIT", "optional": true, + "peer": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -7969,17 +7986,17 @@ } }, "node_modules/shiki": { - "version": "1.29.1", - "resolved": "https://registry.npmmirror.com/shiki/-/shiki-1.29.1.tgz", - "integrity": "sha512-TghWKV9pJTd/N+IgAIVJtr0qZkB7FfFCUrrEJc0aRmZupo3D1OCVRknQWVRVA7AX/M0Ld7QfoAruPzr3CnUJuw==", + "version": "1.29.2", + "resolved": "https://registry.npmmirror.com/shiki/-/shiki-1.29.2.tgz", + "integrity": "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==", "license": "MIT", "dependencies": { - "@shikijs/core": "1.29.1", - "@shikijs/engine-javascript": "1.29.1", - "@shikijs/engine-oniguruma": "1.29.1", - "@shikijs/langs": "1.29.1", - "@shikijs/themes": "1.29.1", - "@shikijs/types": "1.29.1", + "@shikijs/core": "1.29.2", + "@shikijs/engine-javascript": "1.29.2", + "@shikijs/engine-oniguruma": "1.29.2", + "@shikijs/langs": "1.29.2", + "@shikijs/themes": "1.29.2", + "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } @@ -8051,6 +8068,18 @@ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", "license": "MIT" }, + "node_modules/smol-toml": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/smol-toml/-/smol-toml-1.3.1.tgz", + "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, "node_modules/sortablejs": { "version": "1.14.0", "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz", @@ -9492,9 +9521,9 @@ } }, "node_modules/which-pm": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/which-pm/-/which-pm-3.0.0.tgz", - "integrity": "sha512-ysVYmw6+ZBhx3+ZkcPwRuJi38ZOTLJJ33PSHaitLxSKUMsh0LkKd0nC69zZCwt5D+AYUcMK2hhw4yWny20vSGg==", + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/which-pm/-/which-pm-3.0.1.tgz", + "integrity": "sha512-v2JrMq0waAI4ju1xU5x3blsxBBMgdgZve580iYMN5frDaLGjbA24fok7wKCsya8KLVO19Ju4XDc5+zTZCJkQfg==", "license": "MIT", "dependencies": { "load-yaml-file": "^0.2.0" @@ -9696,6 +9725,22 @@ "prettier": "2.8.7" } }, + "node_modules/yaml-language-server/node_modules/prettier": { + "version": "2.8.7", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "license": "MIT", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/yaml-language-server/node_modules/request-light": { "version": "0.5.8", "resolved": "https://registry.npmmirror.com/request-light/-/request-light-0.5.8.tgz", diff --git a/package.json b/package.json index 6c07664..6d37793 100644 --- a/package.json +++ b/package.json @@ -14,12 +14,12 @@ "dependencies": { "@astrojs/check": "^0.9.4", "@astrojs/db": "^0.14.6", - "@astrojs/mdx": "^4.0.7", + "@astrojs/mdx": "^4.0.8", "@astrojs/rss": "^4.0.11", "@astrojs/sitemap": "^3.2.1", - "@astrojs/tailwind": "^5.1.5", + "@astrojs/tailwind": "^6.0.0", "@astrojs/vue": "^5.0.6", - "astro": "^5.1.10", + "astro": "^5.3.0", "tailwindcss": "^3.4.17", "typescript": "^5.7.3", "vue": "^3.5.13", diff --git a/src/content/lab/20250215-nature-driven-dev.md b/src/content/lab/20250215-nature-driven-dev.md new file mode 100644 index 0000000..9f0c4f5 --- /dev/null +++ b/src/content/lab/20250215-nature-driven-dev.md @@ -0,0 +1,44 @@ +--- +title: 自然驱动开发 +pubDate: 2025-02-15 +tags: [💻IT] +level: 3 +top: 2 +--- + +这几天在继续思考[《以数据为中心》](/lab/20250125-data-centric),也参考了别人反思 DDD 的文章[《拥抱毒瘤 DDD!》]。 + +发现一个业界尤其是业务开发可能比较严重的问题,就是喜欢从上到下,以抽象的需求话语驱动具体的技术开发,而不是从实际出发,从下到上。也就是想得太多,观察和实践太少,并喜欢用臆想指导实践。 + +可以学习下马斯克第一性原理,从自然规律和底层信息和技术入手,倒推上层的需求和设计,而不是靠臆想和片面的信息。 + +所以我升级了之前【以数据为中心】的思考,为【自然驱动开发】,让自然规律成为核心。就像实体产业比如机械建筑等注重物理规律和人身安全一样,注重软件开发的底层规律和安全问题。 + +### 数据架构 + +我觉得未来数据架构最重要,AI 直接对接数据就行,AI 根据需求直接动态生成前后端代码。 + +如果需求变了,再生成新的就行。但是数据架构应该不怎么变,因为这代表着系统的核心逻辑。 + +某种程度上,数据也算是【自然驱动开发】里核心的自然因素之一了。 + +因为数据不但是计算机处理的底层对象,也是各种需求依托的重要对象,很多软件本质上只是数据的外壳。 + +### 低业务架构 + +我有时候设想,业务人员想要低代码平台,那程序员可否搞个【低业务架构】。 + +有了这个架构,程序员不需要关注过多业务逻辑,而是更关注更接近底层自然的工程技术逻辑。 + +业务逻辑由需求分析人员分解为比较基本和规整的逻辑,交由程序员开发或让程序员提供工具,程序员不需要关注太多业务功能,业务功能可以交给业务分析和测试来关注。 + +程序员构建良好的技术架构和指标(这些更接近自然),降低对业务理解的依赖和耦合。将业务和工程解耦,就跟将建筑设计和施工解耦一样。 + +程序员应该做工具,而不是当工具本身。如果我自己开发游戏的话,我就先开发一些工具,然后再利用这些工具来做游戏内容。前者,我是程序员,后者,我是策划。如果直接用代码来写游戏逻辑,不断试错游戏想法的话,很不方便。 + +所以我这是反DDD的。DDD适合分析整理需求,不适合指导开发。DDD讲究开发人员充分理解业务,把本该清晰分离的需求分析和程序开发的职责给耦合在一起了。 + +我觉得更适合技术人员的脚踏实地的方案应该类似数据驱动开发这样的可以直接落地的方案,数据比领域要踏实多了。 + + +[《拥抱毒瘤 DDD!》]: https://mp.weixin.qq.com/s/AhklSNwD1UzHv0hCGNMcVg