dzkcc-mflow 0.0.39 → 0.0.41

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.
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  ## 核心特性
8
8
 
9
9
  ✨ **模块化设计** - 通过 Manager 和 Model 模式实现业务逻辑的模块化管理
10
- ✨ **依赖注入** - 基于装饰器的自动依赖注入和 Symbol 映射
10
+ ✨ **依赖注入** - 基于装饰器的自动依赖注入和字符串标识
11
11
  ✨ **服务定位器** - 统一的服务管理机制,实现服务解耦
12
12
  ✨ **UI 管理系统** - 完整的 UI 界面管理方案,支持视图栈和分组
13
13
  ✨ **事件系统** - 强大的事件广播和监听机制,支持粘性事件
@@ -35,8 +35,10 @@ npm i dzkcc-mflow@beta
35
35
  "extends": "./temp/tsconfig.cocos.json",
36
36
  "compilerOptions": {
37
37
  "strict": false,
38
+ "baseUrl": ".",//必须
38
39
  "paths": {
39
- "dzkcc-mflow/*": ["./node_modules/dzkcc-mflow/dist/*"]
40
+ "db://assets/*": ["assets/*"], //必须
41
+ "dzkcc-mflow/*": ["./node_modules/dzkcc-mflow/dist/*"] //必须
40
42
  }
41
43
  }
42
44
  }
@@ -62,7 +64,7 @@ export class GameCore extends CocosCore {
62
64
 
63
65
  ### 1. 核心概念
64
66
 
65
- 了解框架的基础架构、Core 容器、ServiceLocator、Manager、Model、View 和 Symbol 映射系统。
67
+ 了解框架的基础架构、Core 容器、ServiceLocator、Manager、Model、View 和字符串标识系统。
66
68
 
67
69
  📖 **查看文档**: [核心概念](./docs/CORE_CONCEPTS.md)
68
70
 
@@ -171,12 +173,13 @@ mf.reddot.on('main/bag', (totalCount) => {
171
173
  // types/api-type-hints.d.ts
172
174
  declare module 'dzkcc-mflow/core' {
173
175
  interface ModelTypeMap {
174
- [ModelNames.User]: UserModel;
176
+ UserModel: UserModel;
177
+ GameModel: GameModel;
175
178
  }
176
179
  }
177
180
 
178
181
  // 使用时自动推断类型
179
- const userModel = mf.core.getModel(ModelNames.User);
182
+ const userModel = mf.core.getModel('UserModel');
180
183
  userModel.name; // ✅ 有完整的代码补全
181
184
  ```
182
185
 
@@ -187,7 +190,7 @@ userModel.name; // ✅ 有完整的代码补全
187
190
  **编辑器菜单**:**mflow-tools -> Generate API type hints/生成API类型提示**
188
191
 
189
192
  > ⚠️ **如果 getManager/getModel 没有类型提示**?
190
- >
193
+ >
191
194
  > 需要创建类型映射文件,使用编辑器的 **mflow-tools -> Generate API type hints/生成API类型提示** 自动生成,
192
195
  > 或查看 [类型提示问题解决方案](./docs/TYPE_INFERENCE_FIX.md)
193
196
 
@@ -219,40 +222,58 @@ Cocos Creator 编辑器插件,自动生成 UI 脚本,自动设置组件引
219
222
  ## 架构图
220
223
 
221
224
  ```
222
- ┌─────────────────────────────────────────────────┐
223
- 全局对象 mf
224
- (统一访问入口,暴露所有框架能力)
225
- └──────────────────┬──────────────────────────────┘
226
-
227
- ┌──────────────┼──────────────┐
228
-
229
-
230
- ┌─────────┐ ┌──────────┐ ┌──────────┐
231
- │ Core │ │ Services │ │ Views │
232
- │(核心容器)│ │(基础服务) │ │ (UI界面) │
233
- └─────────┘ └──────────┘ └──────────┘
234
-
235
- ├─ Manager ─┐ ├─ UIManager ├─ BaseView
236
- │ │ ├─ ResLoader └─ 自动资源管理
237
- ├─ Model ───┤ ├─ EventMgr 自动事件清理
238
- │ │ ├─ HttpMgr
239
- └─ Symbol ──┘ ├─ SocketMgr
240
- 映射系统 └─ RedDotMgr
225
+ ┌─────────────────────────────────────────────────────────────────┐
226
+ 全局对象 mf
227
+ (统一访问入口,暴露所有框架能力)
228
+ └─────────────────────────┬───────────────────────────────────────┘
229
+
230
+ ┌─────────────────────┼─────────────────────┐
231
+
232
+
233
+ ┌─────────┐ ┌─────────────────────────────────────────┐ ┌──────────┐
234
+ │ Core │ │ ServiceLocator │ │ Views │
235
+ │(核心容器)│ │ (服务定位器) │ │ (UI界面) │
236
+ └─────────┘ └─────────────────────────────────────────┘ └──────────┘
237
+
238
+ ├─ Manager ─┐ ├─ Broadcaster(EventMgr) ├─ BaseView
239
+ │ │ ├─ UIManager └─ 自动资源管理
240
+ ├─ Model ───┤ ├─ ResLoader └─ 自动事件清理
241
+ │ │ ├─ HttpManager
242
+ └─ 字符串 ───┘ ├─ WebSocketManager
243
+ 标识系统 └─ RedDotManager
241
244
  ```
242
245
 
246
+ ### 架构说明
247
+
248
+ 1. **全局对象 `mf`** - 提供统一访问入口,通过 `mf.core`、`mf.gui`、`mf.event` 等访问各模块功能
249
+
250
+ 2. **Core (核心容器)** - 管理业务层的 Model 和 Manager,支持依赖注入和类型推断
251
+
252
+ 3. **ServiceLocator (服务定位器)** - 统一管理框架的基础服务,包括:
253
+ - **Broadcaster** - 事件广播系统,支持粘性事件
254
+ - **UIManager** - UI界面管理系统,支持视图栈和生命周期管理
255
+ - **ResLoader** - 资源加载器,支持自动释放和缓存管理
256
+ - **HttpManager** - HTTP网络客户端,支持RESTful API
257
+ - **WebSocketManager** - WebSocket实时通信,支持自动重连和心跳
258
+ - **RedDotManager** - 树形结构的红点提示管理系统
259
+
260
+ 4. **Views (UI界面)** - 基于 BaseView 的界面组件,支持完整的生命周期管理和自动资源清理
261
+
262
+ 5. **依赖注入系统** - 通过装饰器(@manager、@model、@view)和字符串标识实现自动依赖注入
263
+
243
264
  ## 使用全局对象
244
265
 
245
266
  框架提供了全局对象 `mf` 用于访问所有功能:
246
267
 
247
268
  ```typescript
248
269
  // 访问 Manager
249
- mf.core.getManager(ManagerNames.GameManager);
270
+ mf.core.getManager('GameManager');
250
271
 
251
272
  // 访问 Model
252
- mf.core.getModel(ModelNames.UserModel);
273
+ mf.core.getModel('UserModel');
253
274
 
254
275
  // UI 管理
255
- mf.gui.open(ViewNames.HomeView);
276
+ mf.gui.open('HomeView');
256
277
 
257
278
  // 事件系统
258
279
  mf.event.dispatch('gameStart');
@@ -53,7 +53,11 @@ export interface UIPreloadConfig {
53
53
  /** 预加载延迟(毫秒) */
54
54
  delay?: number;
55
55
  }
56
- type ICocosView = IView & Component;
56
+ interface IInternalView extends IView {
57
+ __group__: string | undefined;
58
+ __isIView__: boolean;
59
+ }
60
+ type ICocosView = IInternalView & Component;
57
61
  declare abstract class CcocosUIManager implements IUIManager {
58
62
  getTopView(): IView | undefined;
59
63
  open<T extends keyof UIRegistry>(viewClass: T, args?: UIOpenOptions): Promise<InstanceType<UIRegistry[T]>>;
@@ -277,14 +277,14 @@ class UIManager extends CcocosUIManager {
277
277
  if (!this._maskOptions.clickToClose) {
278
278
  return;
279
279
  }
280
- const view = this.getTopView();
280
+ const view = this._internalGetTopView();
281
281
  if (!view) {
282
282
  return;
283
283
  }
284
284
  // 区分两种情况处理:
285
285
  // 1. 如果视图有 __group__ 属性且不为 undefined,说明是通过 openAndPush 打开的栈式UI
286
286
  // 2. 否则是通过 open 打开的普通 UI
287
- if ('__group__' in view && view.__group__ !== undefined) {
287
+ if (view.__group__ && view.__group__.trim() != "") {
288
288
  // 栈式UI:调用 _internalCloseAndPop 来处理返回逻辑
289
289
  this._internalCloseAndPop(view.__group__, false);
290
290
  }
@@ -405,10 +405,10 @@ class UIManager extends CcocosUIManager {
405
405
  if (this._loadingPromises.has(viewKey)) {
406
406
  return this._loadingPromises.get(viewKey);
407
407
  }
408
- const loadPromise = this._loadInternal(viewKey);
409
- this._loadingPromises.set(viewKey, loadPromise);
410
408
  try {
411
- return yield loadPromise;
409
+ const view = this._loadInternal(viewKey);
410
+ this._loadingPromises.set(viewKey, view);
411
+ return yield view;
412
412
  }
413
413
  finally {
414
414
  this._loadingPromises.delete(viewKey);
@@ -500,9 +500,7 @@ class UIManager extends CcocosUIManager {
500
500
  top.node.removeFromParent();
501
501
  }
502
502
  // 标记视图所属组并入栈
503
- if ('__group__' in view) {
504
- view.__group__ = group;
505
- }
503
+ view.__group__ = group;
506
504
  stack.push(view);
507
505
  addChild(view.node);
508
506
  this._adjustMaskLayer();
@@ -574,9 +572,7 @@ class UIManager extends CcocosUIManager {
574
572
  }
575
573
  // 处理视图实例
576
574
  const viewInstance = viewKeyOrInstance;
577
- if ('__group__' in viewInstance) {
578
- viewInstance.__group__ = undefined;
579
- }
575
+ viewInstance.__group__ = undefined;
580
576
  if (!skipAnimation) {
581
577
  // * 播放关闭动画,使用async是必要的,因为:
582
578
  // * 确保动画播放完成后再执行onExit和节点移除,不然还没播放动画了,UI就已经没了
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dzkcc-mflow",
3
- "version": "0.0.39",
3
+ "version": "0.0.41",
4
4
  "description": "A modular design and process management framework developed for the cocos engine, suitable for decoupling and dependency injection.",
5
5
  "author": "duanzhk",
6
6
  "license": "MIT",