1 | # 系统体系结构
|
2 |
|
3 | ## 项目根目录
|
4 |
|
5 | 根目录下存放一些重要的系统文件
|
6 |
|
7 | package.json 依赖包列表
|
8 | gameconfig.js 节点部署配置文件
|
9 | README.md 系统简介
|
10 | LICENSE 版权声明
|
11 | .gitignore GIT仓库忽略文件列表
|
12 |
|
13 | ## facade
|
14 |
|
15 | 系统核心代码
|
16 | - plugin: 存放对核心类进行扩充的函数集
|
17 | 目录下default.js中的函数将直接挂接于CoreOfBase
|
18 | 目录下{name}.js中的函数将挂接于CoreOfBase.{name}。函数的第一个参数env由系统自动注入,指向核心对象。
|
19 | 例如,default.js 有一个函数 urlToCdn(env, url),当前核心对象为 fo,则可以通过 fo.urlToCdn(url) 来调用该函数,其中 env 指向 fo。
|
20 | @note 之所以不采用this指针指向核心对象的方式,而是单独注入env参数,是因为前者很难借助词法分析器的帮助来降低函数书写的难度。
|
21 | @note 扩展函数的作者,需要在熟悉核心类内部构造的基础上,自行规避命名冲突问题
|
22 |
|
23 | - middleware:存放作用于来访信息流的用户自定义中间件
|
24 | 系统中间件、用户自定义中间件的名称可以配置于 Control.middleware 中,例如:
|
25 | class test extends facade.Control {
|
26 | get middleware(){
|
27 | return ['userDefine1', 'userDefine2'];
|
28 | }
|
29 | }
|
30 | 指示对造访控制器test的信息流,依次应用 userDefine1、userDefine2 这两个中间件进行处理
|
31 |
|
32 | - core: 存放自定义的核心类。
|
33 | 在当前框架中,每个独立进程启动时唯一创建一种核心类的单态实例,承载一定的功能集合。内置的核心类包括Index(注册码'Index',可重定义)、Logic(注册码'IOS'、'Android',可重定义)
|
34 | app/core 下有一个实现范例 CoreOfImage(注册码'Image'),承载抓取网络图片(例如社交网络的头像)的功能
|
35 | 核心类的注册码可用于运行环境配置文件game.config.js中
|
36 |
|
37 | - util:存放自定义逻辑模块
|
38 |
|
39 | - model:存放数据库管理相关类
|
40 | entity:实体类,唯一对应一个ORM类,对其进行功能扩展,其实例可接受Mapping、Ranking等容器类的管理
|
41 | table:ORM类,直接映射一张数据库表
|
42 | assistant:ORM辅助类,针对 User(代表用户的ORM类) 的单个字段进行功能拓展,支持脏数据检测、自动序列化存储。例如,item提供用户背包管理功能,其存储结构映射为User.item上。
|
43 |
|
44 | - define:枚举和数据结构定义
|
45 | - control:访问控制类,规范了客户端/服务端远程交互接口,以及服务端/服务端RPC交互接口
|
46 | - events:自定义事件类,用于各模块间解耦
|
47 | - service:自定义扩展服务类(继承自FSM),服务器启动时为这些类自动创建单例对象,注入为facade.current.service的属性成员
|
48 |
|
49 | ## app
|
50 |
|
51 | 该目录用于存放所有用户自定义代码
|
52 |
|
53 | ### plugin: 存放对核心类进行扩充的函数集
|
54 |
|
55 | - 目录下default.js中的函数将直接挂接于CoreOfBase
|
56 | - 目录下{name}.js中的函数将挂接于CoreOfBase.{name}。函数的第一个参数env由系统自动注入,指向核心对象。
|
57 | 例如,default.js 有一个函数 urlToCdn(env, url),当前核心对象为 fo,则可以通过 fo.urlToCdn(url) 来调用该函数,其中 env 指向 fo。
|
58 |
|
59 | @note 之所以不采用this指针指向核心对象的方式,而是单独注入env参数,是因为前者很难借助词法分析器的帮助来降低函数书写的难度。
|
60 | @note 扩展函数的作者,需要在熟悉核心类内部构造的基础上,自行规避命名冲突问题
|
61 |
|
62 | ### middleware
|
63 |
|
64 | 存放作用于来访信息流的用户自定义中间件。
|
65 |
|
66 | ### core: 存放自定义的核心类。
|
67 | 在当前框架中,每个独立进程启动时唯一创建一种核心类的单态实例,承载一定的功能集合。内置的核心类包括Index(注册码'Index')、Logic(注册码'IOS'、'Android')
|
68 | app/core 下有一个实现范例 CoreOfImage(注册码'Image'),承载抓取网络图片(例如社交网络的头像)的功能
|
69 | 核心类的注册码可用于运行环境配置文件game.config.js中
|
70 |
|
71 | ### util:存放自定义逻辑模块
|
72 | ### model:存放数据库管理相关类
|
73 | - entity:ORM映射类,唯一对应一个ORM底层类,对其进行功能扩展,其实例可接受Mapping、Ranking等容器类的管理
|
74 | - table:表映射类,直接映射一张数据库表
|
75 | - assistant:ORM辅助类,针对 User(代表用户的ORM类) 的单个字段进行功能拓展,支持脏数据检测、自动序列化存储。例如,item提供用户背包管理功能,其存储结构映射为User.item上。
|
76 |
|
77 | ### define:枚举和数据结构定义
|
78 |
|
79 | ### control:访问控制类
|
80 | 规范了客户端/服务端远程交互接口,以及服务端/服务端RPC交互接口
|
81 |
|
82 | ### events:自定义事件类
|
83 | 用于各模块间解耦
|
84 |
|
85 | ### service:自定义扩展服务类(继承自FSM)
|
86 |
|
87 | 服务器启动时为这些类自动创建单例对象,注入为facade.current.service的属性成员
|
88 |
|
89 | ## config
|
90 |
|
91 | 该目录集中存放 HTTPS证书、配置文件、系统维护任务、数据迁移记录
|
92 |
|
93 | - cert:https证书
|
94 | - data:数据配置文件
|
95 | - maintain:维护和数据修复
|
96 | - migrations:数据库迁移
|
97 |
|
98 | ## .gamegold
|
99 |
|
100 | 该目录用于 gamegold 节点存放配置信息和数据库文件
|
101 |
|
102 | ## docs
|
103 |
|
104 | 该目录存放系统说明文档,作为根目录下 README.md 的扩展阅读
|
105 |
|
106 | ## logs
|
107 |
|
108 | 该目录记录系统运行日志
|
109 |
|
110 | ## test
|
111 |
|
112 | 该目录存放单元测试文件
|
113 |
|
114 | ## web
|
115 |
|
116 | 该目录存放静态资源文件,用于架设对外服务的 Web Server
|
117 |
|
118 | ## coverage
|
119 |
|
120 | 覆盖率测试报告,可以使用如下命令重新生成:
|
121 |
|
122 | ```bash
|
123 | npm run cover
|
124 | ```
|