JianghuJS的架构设计与扩展性

架构图

前端(doUiAction)
基于_ui表统一管理前端动作(ui变更、数据请求、等等), 前端页面启用uiAction后,就可以通过doUiAction("uiActionId", uiActionParamObj) 来执行 _ui表中uiActionConfig中的所有方法(function)。

后端(Resouce 相关 & 中间件)
江湖Js中用到Resource来用控制业务逻辑使用什么方式处理,江湖JS有两种选择给到用户,一是使用sql直接处理,二是使用service处理,两者各有优缺点,用户可以根据自己情况来选择Resource的类型

数据库(View 表)
江湖Js中很多地方用到视图(view), 他是江湖Js开发的一种规范,用于简化代码、数据联合、简化查询、自定义统计

WechatIMG142.png

拓展性

前端拓展性

自定义登陆页
在当前项目的 app/view/page 下重写loginV4.html,即可自定义登录页

自定义导航栏
在当前项目的 app/view/component下重写jhMenuV4.html,即可自定义登录页

自定义模板
在当前项目的 app/view/template 下重写jhTemplateV4.html,即可自定义模板

后端拓展性

自定义中间件
参考 05_JianghuJS自定义中间件

自定义service
江湖js框架内置的router、 controller、service都可以被用户自定义重写,按照江湖js的规范入参和出参即可

  1. loadConfig() {
  2. super.loadConfig();
  3. }
  4. loadRouter() {
  5. // super.loadRouter();
  6. this.initJianghuRouter();
  7. }
  8. initJianghuRouter() {
  9. this.loadController({
  10. directory: this.getLoadUnits().map(unit => path.join(unit.path, 'app/controller')),
  11. // 让 controller 也支持 override
  12. override: true,
  13. });
  14. this.getLoadUnits().reverse().forEach(unit =>
  15. this.loadFile(path.join(unit.path, 'app/router.js'))
  16. );
  17. }
  18. loadService(opt) {
  19. opt = Object.assign({
  20. override: true,
  21. }, opt);
  22. super.loadService(opt);
  23. }

覆盖登录逻辑
在 app/service.js 里重写 passwordLogin 即可

按照登录的resource配置,如果没有service、action的话,创建对应的service和action即可

  • 先在app/service.js下创建user.js
  • user.js里重写江湖JS里对应user.jspasswordLogin方法
    1. async passwordLogin() {
    2. // 实现逻辑
    3. }

数据库拓展性
用户可以使用类mysql的关系型数据库代替mysql

例如使用MariaDB、Percona Server、Amazon Aurora、TiDB等优秀的数据来代替mysql, 都是一个不错的选择