sdd-full 5.0.3 → 5.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -341,7 +341,16 @@ description: "功能实现逻辑SDD拆分,将用户故事拆分为独立可交
341
341
  - **sdd-add**:快速迭代补充(如需要)
342
342
  - **子代理开发**:执行SDD开发
343
343
 
344
- ## 7.3 流程关系
344
+ ## 7.3 配套技能
345
+ - **code-split-spec**:代码拆分规范,指导实际代码文件/模块/组件拆分
346
+ - **state-management**:状态管理,处理应用状态管理
347
+ - **data-fetching**:数据获取处理,统一API请求和缓存
348
+ - **component-split**:组件拆分,前端组件化设计
349
+ - **architecture-refactor**:架构重构,如需架构调整时使用
350
+ - **code-review-standard**:代码审查标准,确保代码质量
351
+ - **test-driven-development**:TDD开发,测试驱动开发
352
+
353
+ ## 7.4 流程关系
345
354
  ```
346
- sdd → ui-sdd → sdd-code → sdd-test → 开发
355
+ sdd → ui-sdd → sdd-code → [code-split-spec/component-split/state-management/data-fetching → sdd-test → 开发 → code-review-standard
347
356
  ```
@@ -22,6 +22,9 @@ description: "SDD全流程通用可复用技能集合"
22
22
  - [sdd-deploy](#sdd-deploy) - 部署SDD
23
23
  - [writing-plans](#writing-plans) - 制定计划
24
24
  - [ui-motion-interaction-standard](#ui-motion-interaction-standard) - UI动效交互标准
25
+ - [code-split-spec](#code-split-spec) - 代码拆分规范
26
+ - [component-split](#component-split) - 组件拆分
27
+ - [architecture-refactor](#architecture-refactor) - 架构重构执行
25
28
 
26
29
  ### 开发执行类
27
30
  - [sdd-add](#sdd-add) - 快速迭代
@@ -30,6 +33,8 @@ description: "SDD全流程通用可复用技能集合"
30
33
  - [verification-before-completion](#verification-before-completion) - 完成前验证
31
34
  - [design-to-code](#design-to-code) - 设计转代码
32
35
  - [performance-optimize](#performance-optimize) - 性能优化
36
+ - [state-management](#state-management) - 状态管理
37
+ - [data-fetching](#data-fetching) - 数据获取处理
33
38
 
34
39
  ### Flutter专项类
35
40
  - [flutter-apply-architecture-best-practices](#flutter-apply-architecture-best-practices) - Flutter架构适配
@@ -53,6 +58,7 @@ description: "SDD全流程通用可复用技能集合"
53
58
  - [bug-reproduction-confirm](#bug-reproduction-confirm) - Bug复现确认
54
59
  - [requesting-code-review](#requesting-code-review) - 请求代码审查
55
60
  - [receiving-code-review](#receiving-code-review) - 接收代码审查
61
+ - [code-review-standard](#code-review-standard) - 代码审查标准
56
62
 
57
63
  ### 发布运维类
58
64
  - [finishing-a-development-branch](#finishing-a-development-branch) - 完成开发分支
@@ -376,3 +382,45 @@ description: "SDD全流程通用可复用技能集合"
376
382
  **描述**: 设计契约专家
377
383
  **适用场景**: API设计、接口契约
378
384
  **关键输出**: 契约文档
385
+
386
+ ---
387
+
388
+ ### code-split-spec
389
+ **描述**: 代码拆分规范
390
+ **适用场景**: 代码文件/模块/组件拆分、架构设计
391
+ **关键输出**: 拆分后的代码结构、规范文档
392
+
393
+ ---
394
+
395
+ ### state-management
396
+ **描述**: 状态管理
397
+ **适用场景**: React/Vue/Flutter状态管理方案选择与实现
398
+ **关键输出**: 状态管理代码、状态结构设计
399
+
400
+ ---
401
+
402
+ ### data-fetching
403
+ **描述**: 数据获取处理
404
+ **适用场景**: API请求、缓存策略、错误处理
405
+ **关键输出**: 数据请求封装、缓存实现
406
+
407
+ ---
408
+
409
+ ### component-split
410
+ **描述**: 组件拆分
411
+ **适用场景**: 前端组件化拆分、可复用组件设计
412
+ **关键输出**: 拆分后的组件、组件库
413
+
414
+ ---
415
+
416
+ ### architecture-refactor
417
+ **描述**: 架构重构执行
418
+ **适用场景**: 架构演进、代码重构、遗留系统改造
419
+ **关键输出**: 重构计划、重构后的代码
420
+
421
+ ---
422
+
423
+ ### code-review-standard
424
+ **描述**: 代码审查标准
425
+ **适用场景**: 代码审查、质量把控
426
+ **关键输出**: 审查报告、改进建议
@@ -0,0 +1,260 @@
1
+ ---
2
+ name: state-management
3
+ description: 状态管理技能 - 提供 React/Vue/Flutter 状态管理最佳实践和方案选择指导
4
+ ---
5
+
6
+ # state-management - 状态管理技能
7
+
8
+ ## 概述
9
+
10
+ 提供状态管理的统一规范和最佳实践,帮助选择合适的状态管理方案,指导状态拆分、存储和更新。
11
+
12
+ **核心原则:最小化状态、单一数据源、单向数据流**
13
+
14
+ ---
15
+
16
+ ## 1. 状态管理方案选择
17
+
18
+ ### 1.1 方案选型决策树
19
+
20
+ ```
21
+ 项目规模小/状态简单?
22
+ ├─ 是 → 使用框架原生状态(React useState/Vue data/Flutter State)
23
+ └─ 否 → 需要共享状态?
24
+ ├─ 否 → 组件内状态
25
+ └─ 是 → 共享范围?
26
+ ├─ 局部(几个组件)→ Context/Provider/InheritedWidget
27
+ └─ 全局/复杂 → Redux/Zustand/Pinia/MobX/Bloc/Riverpod
28
+ ```
29
+
30
+ ### 1.2 各场景推荐方案
31
+
32
+ | 场景 | React | Vue | Flutter |
33
+ |-----|-------|-----|---------|
34
+ | 小项目/简单状态 | useState | data/setup | State |
35
+ | 父子组件共享 | Context + useReducer | Provide/Inject | InheritedWidget |
36
+ | 中等项目 | Zustand/Jotai | Pinia | Provider |
37
+ | 大项目/复杂流 | Redux Toolkit | Pinia + Vuex(legacy) | Bloc/Riverpod |
38
+
39
+ ---
40
+
41
+ ## 2. 状态拆分原则
42
+
43
+ ### 2.1 按生命周期拆分
44
+
45
+ ```
46
+ 1. 临时状态(UI状态):表单输入、弹窗开关、加载状态 → 组件内
47
+ 2. 持久状态:用户偏好、主题设置 → LocalStorage/SharedPreferences
48
+ 3. 服务端状态:API数据 → 缓存层(React Query/SWR)
49
+ 4. URL状态:路由参数、查询字符串 → URL
50
+ ```
51
+
52
+ ### 2.2 按作用域拆分
53
+
54
+ ```
55
+ 全局状态:App主题、用户登录状态、权限
56
+
57
+ 模块状态:购物车、当前订单
58
+
59
+ 页面状态:列表筛选、分页
60
+
61
+ 组件状态:表单输入、动画进度
62
+ ```
63
+
64
+ ### 2.3 状态最小化原则
65
+
66
+ - **不要存储可计算的数据**:从其他状态派生
67
+ - **不要存储UI组件引用**:使用回调/事件
68
+ - **保持状态扁平化**:避免深层嵌套
69
+
70
+ ```typescript
71
+ // Bad: 存储派生数据
72
+ const state = {
73
+ items: [...],
74
+ itemCount: 5, // 可从 items.length 计算
75
+ filteredItems: [...] // 可从 items 过滤
76
+ };
77
+
78
+ // Good: 只存储源数据
79
+ const state = {
80
+ items: [...]
81
+ };
82
+ // 使用选择器获取派生数据
83
+ const getItemCount = (state) => state.items.length;
84
+ ```
85
+
86
+ ---
87
+
88
+ ## 3. React 状态管理
89
+
90
+ ### 3.1 Zustand 实践(推荐)
91
+
92
+ ```typescript
93
+ // store/useUserStore.ts
94
+ import { create } from 'zustand';
95
+
96
+ interface UserState {
97
+ user: User | null;
98
+ isLoading: boolean;
99
+ error: string | null;
100
+ setUser: (user: User) => void;
101
+ logout: () => void;
102
+ fetchUser: (id: string) => Promise<void>;
103
+ }
104
+
105
+ export const useUserStore = create<UserState>((set, get) => ({
106
+ user: null,
107
+ isLoading: false,
108
+ error: null,
109
+
110
+ setUser: (user) => set({ user }),
111
+
112
+ logout: () => set({ user: null }),
113
+
114
+ fetchUser: async (id) => {
115
+ set({ isLoading: true, error: null });
116
+ try {
117
+ const user = await api.getUser(id);
118
+ set({ user, isLoading: false });
119
+ } catch (error) {
120
+ set({ error: error.message, isLoading: false });
121
+ }
122
+ }
123
+ }));
124
+ ```
125
+
126
+ ### 3.2 状态拆分示例
127
+
128
+ ```
129
+ src/stores/
130
+ ├── useUserStore.ts # 用户相关
131
+ ├── useCartStore.ts # 购物车
132
+ ├── useThemeStore.ts # 主题
133
+ └── useNotificationStore.ts # 通知
134
+ ```
135
+
136
+ ---
137
+
138
+ ## 4. Vue 状态管理
139
+
140
+ ### 4.1 Pinia 实践(推荐)
141
+
142
+ ```typescript
143
+ // stores/user.ts
144
+ import { defineStore } from 'pinia';
145
+ import { ref, computed } from 'vue';
146
+
147
+ export const useUserStore = defineStore('user', () => {
148
+ // State
149
+ const user = ref<User | null>(null);
150
+ const isLoading = ref(false);
151
+ const error = ref<string | null>(null);
152
+
153
+ // Getters
154
+ const isLoggedIn = computed(() => !!user.value);
155
+ const userName = computed(() => user.value?.name || '');
156
+
157
+ // Actions
158
+ async function fetchUser(id: string) {
159
+ isLoading.value = true;
160
+ error.value = null;
161
+ try {
162
+ user.value = await api.getUser(id);
163
+ } catch (err) {
164
+ error.value = err.message;
165
+ } finally {
166
+ isLoading.value = false;
167
+ }
168
+ }
169
+
170
+ function logout() {
171
+ user.value = null;
172
+ }
173
+
174
+ return { user, isLoading, error, isLoggedIn, userName, fetchUser, logout };
175
+ });
176
+ ```
177
+
178
+ ---
179
+
180
+ ## 5. Flutter 状态管理
181
+
182
+ ### 5.1 Provider 实践(推荐入门)
183
+
184
+ ```dart
185
+ // providers/user_provider.dart
186
+ class UserProvider with ChangeNotifier {
187
+ User? _user;
188
+ bool _isLoading = false;
189
+ String? _error;
190
+
191
+ User? get user => _user;
192
+ bool get isLoading => _isLoading;
193
+ String? get error => _error;
194
+ bool get isLoggedIn => _user != null;
195
+
196
+ Future<void> fetchUser(String id) async {
197
+ _isLoading = true;
198
+ _error = null;
199
+ notifyListeners();
200
+
201
+ try {
202
+ _user = await api.getUser(id);
203
+ } catch (e) {
204
+ _error = e.toString();
205
+ } finally {
206
+ _isLoading = false;
207
+ notifyListeners();
208
+ }
209
+ }
210
+
211
+ void logout() {
212
+ _user = null;
213
+ notifyListeners();
214
+ }
215
+ }
216
+ ```
217
+
218
+ ### 5.2 Riverpod 实践(推荐进阶)
219
+
220
+ ```dart
221
+ // providers/user_provider.dart
222
+ @riverpod
223
+ class UserNotifier extends _$UserNotifier {
224
+ @override
225
+ FutureOr<User?> build() {
226
+ return null; // 初始状态
227
+ }
228
+
229
+ Future<void> fetchUser(String id) async {
230
+ state = const AsyncLoading();
231
+ try {
232
+ final user = await api.getUser(id);
233
+ state = AsyncData(user);
234
+ } catch (e, stackTrace) {
235
+ state = AsyncError(e, stackTrace);
236
+ }
237
+ }
238
+
239
+ void logout() {
240
+ state = const AsyncData(null);
241
+ }
242
+ }
243
+ ```
244
+
245
+ ---
246
+
247
+ ## 6. 状态管理检查清单
248
+
249
+ - [ ] 状态按生命周期和作用域正确拆分
250
+ - [ ] 没有存储可计算的派生数据
251
+ - [ ] 状态结构扁平化,避免深层嵌套
252
+ - [ ] 异步操作有 loading/error 状态
253
+ - [ ] 使用选择器(Selectors)优化渲染
254
+ - [ ] 状态更新通过统一的 actions/mutations
255
+ - [ ] 持久化状态有明确的持久化策略
256
+
257
+ ## 与其他技能的衔接
258
+
259
+ - **配合**:code-split-spec、data-fetching
260
+ - **参考**:sdd-code、test-driven-development
@@ -70,3 +70,43 @@
70
70
  - 核心功能必须编写单元测试
71
71
  - 测试覆盖率目标 > 80%
72
72
  - 测试用例描述要清晰
73
+
74
+ ---
75
+
76
+ ## 7. 架构与拆分规范
77
+
78
+ ### 7.1 代码拆分原则
79
+ - 单一职责:每个文件/模块/函数只负责一件事
80
+ - 高内聚低耦合:相关逻辑放一起,模块间依赖最小化
81
+ - 粒度适中:避免过度拆分或拆分不足
82
+
83
+ ### 7.2 目录结构规范
84
+ - 按业务域/功能模块组织代码
85
+ - 分层清晰:表现层、业务层、数据层分离
86
+ - 共享代码放统一位置
87
+
88
+ ### 7.3 组件/模块设计
89
+ - 可复用优先:考虑未来复用场景
90
+ - 接口简洁:对外提供清晰的 API
91
+ - 依赖注入:便于测试和扩展
92
+
93
+ ### 7.4 状态管理
94
+ - 最小化状态:只存储必要的源数据
95
+ - 单一数据源:避免状态重复
96
+ - 单向数据流:便于追踪状态变化
97
+
98
+ ---
99
+
100
+ ## 8. 代码审查规范
101
+
102
+ ### 8.1 审查要点
103
+ - 功能正确性:是否符合需求
104
+ - 代码质量:命名、结构、可读性
105
+ - 架构设计:是否符合架构规范
106
+ - 安全考虑:有无安全隐患
107
+ - 测试覆盖:是否有对应测试
108
+
109
+ ### 8.2 审查反馈
110
+ - 具体明确:指出问题位置和原因
111
+ - 建设性:提供改进建议
112
+ - 尊重他人:对事不对人
package/bin.js CHANGED
@@ -6,7 +6,7 @@ const fs = require('fs');
6
6
  const path = require('path');
7
7
 
8
8
  const SDD = {
9
- version: '5.0.3',
9
+ version: '5.0.5',
10
10
  name: 'sdd-full',
11
11
  description: '完整的软件设计开发技能包'
12
12
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdd-full",
3
- "version": "5.0.3",
3
+ "version": "5.0.5",
4
4
  "description": "SDD Full - 完整的软件设计开发技能包",
5
5
  "main": "index.js",
6
6
  "bin": "./bin.js",