dzkcc-mflow 0.0.39 → 0.0.40

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
  ✨ **事件系统** - 强大的事件广播和监听机制,支持粘性事件
@@ -62,7 +62,7 @@ export class GameCore extends CocosCore {
62
62
 
63
63
  ### 1. 核心概念
64
64
 
65
- 了解框架的基础架构、Core 容器、ServiceLocator、Manager、Model、View 和 Symbol 映射系统。
65
+ 了解框架的基础架构、Core 容器、ServiceLocator、Manager、Model、View 和字符串标识系统。
66
66
 
67
67
  📖 **查看文档**: [核心概念](./docs/CORE_CONCEPTS.md)
68
68
 
@@ -171,12 +171,13 @@ mf.reddot.on('main/bag', (totalCount) => {
171
171
  // types/api-type-hints.d.ts
172
172
  declare module 'dzkcc-mflow/core' {
173
173
  interface ModelTypeMap {
174
- [ModelNames.User]: UserModel;
174
+ UserModel: UserModel;
175
+ GameModel: GameModel;
175
176
  }
176
177
  }
177
178
 
178
179
  // 使用时自动推断类型
179
- const userModel = mf.core.getModel(ModelNames.User);
180
+ const userModel = mf.core.getModel('UserModel');
180
181
  userModel.name; // ✅ 有完整的代码补全
181
182
  ```
182
183
 
@@ -187,7 +188,7 @@ userModel.name; // ✅ 有完整的代码补全
187
188
  **编辑器菜单**:**mflow-tools -> Generate API type hints/生成API类型提示**
188
189
 
189
190
  > ⚠️ **如果 getManager/getModel 没有类型提示**?
190
- >
191
+ >
191
192
  > 需要创建类型映射文件,使用编辑器的 **mflow-tools -> Generate API type hints/生成API类型提示** 自动生成,
192
193
  > 或查看 [类型提示问题解决方案](./docs/TYPE_INFERENCE_FIX.md)
193
194
 
@@ -219,40 +220,58 @@ Cocos Creator 编辑器插件,自动生成 UI 脚本,自动设置组件引
219
220
  ## 架构图
220
221
 
221
222
  ```
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
223
+ ┌─────────────────────────────────────────────────────────────────┐
224
+ 全局对象 mf
225
+ (统一访问入口,暴露所有框架能力)
226
+ └─────────────────────────┬───────────────────────────────────────┘
227
+
228
+ ┌─────────────────────┼─────────────────────┐
229
+
230
+
231
+ ┌─────────┐ ┌─────────────────────────────────────────┐ ┌──────────┐
232
+ │ Core │ │ ServiceLocator │ │ Views │
233
+ │(核心容器)│ │ (服务定位器) │ │ (UI界面) │
234
+ └─────────┘ └─────────────────────────────────────────┘ └──────────┘
235
+
236
+ ├─ Manager ─┐ ├─ Broadcaster(EventMgr) ├─ BaseView
237
+ │ │ ├─ UIManager └─ 自动资源管理
238
+ ├─ Model ───┤ ├─ ResLoader └─ 自动事件清理
239
+ │ │ ├─ HttpManager
240
+ └─ 字符串 ───┘ ├─ WebSocketManager
241
+ 标识系统 └─ RedDotManager
241
242
  ```
242
243
 
244
+ ### 架构说明
245
+
246
+ 1. **全局对象 `mf`** - 提供统一访问入口,通过 `mf.core`、`mf.gui`、`mf.event` 等访问各模块功能
247
+
248
+ 2. **Core (核心容器)** - 管理业务层的 Model 和 Manager,支持依赖注入和类型推断
249
+
250
+ 3. **ServiceLocator (服务定位器)** - 统一管理框架的基础服务,包括:
251
+ - **Broadcaster** - 事件广播系统,支持粘性事件
252
+ - **UIManager** - UI界面管理系统,支持视图栈和生命周期管理
253
+ - **ResLoader** - 资源加载器,支持自动释放和缓存管理
254
+ - **HttpManager** - HTTP网络客户端,支持RESTful API
255
+ - **WebSocketManager** - WebSocket实时通信,支持自动重连和心跳
256
+ - **RedDotManager** - 树形结构的红点提示管理系统
257
+
258
+ 4. **Views (UI界面)** - 基于 BaseView 的界面组件,支持完整的生命周期管理和自动资源清理
259
+
260
+ 5. **依赖注入系统** - 通过装饰器(@manager、@model、@view)和字符串标识实现自动依赖注入
261
+
243
262
  ## 使用全局对象
244
263
 
245
264
  框架提供了全局对象 `mf` 用于访问所有功能:
246
265
 
247
266
  ```typescript
248
267
  // 访问 Manager
249
- mf.core.getManager(ManagerNames.GameManager);
268
+ mf.core.getManager('GameManager');
250
269
 
251
270
  // 访问 Model
252
- mf.core.getModel(ModelNames.UserModel);
271
+ mf.core.getModel('UserModel');
253
272
 
254
273
  // UI 管理
255
- mf.gui.open(ViewNames.HomeView);
274
+ mf.gui.open('HomeView');
256
275
 
257
276
  // 事件系统
258
277
  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.40",
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",