JianghuJS的架构设计与扩展性

12002

1、架构

JianghuJS的架构可以简要概括为以下三个主要层次:

  • 前端(doUiAction)

    • 在前端,使用_ui表统一管理前端动作,包括UI的变更、数据请求等。
    • 启用uiAction后,可以通过 doUiAction("uiActionId", uiActionParamObj) 来执行_ui表中uiActionConfig中定义的所有方法(function)。
  • 后端(Resouce 相关 & 中间件)

    • 后端主要涉及到Resouce相关的处理和中间件的使用。
    • Resouce用于控制业务逻辑的处理方式,提供了两种选择给用户:一是使用SQL直接处理,二是使用Service进行处理。这样的设计允许根据实际情况选择合适的方式,保持了灵活性。
    • 中间件是在请求到达处理逻辑之前或之后执行的代码段,可以用于处理一些通用逻辑、权限验证等。
  • 数据库(View 表)

    • 数据库层面引入了视图(View),用于规范化开发,简化代码,实现数据联合、简化查询、自定义统计等功能。
    • 视图的使用有助于简化复杂的查询逻辑,封装数据联合操作,提高开发效率。

这样的架构设计使得JianghuJS能够在前端、后端和数据库层面提供一套清晰的规范和工具,旨在提高开发效率,降低代码复杂度,并提供灵活性以适应不同的开发需求。

WechatIMG142.png

2、扩展

  • 前端扩展性

在JianghuJS前端开发中,有以下几个方面的拓展性,允许开发者根据实际需求进行个性化定制:

  1. 自定义登陆页: 开发者可以在当前项目的 app/view/page 目录下重写 loginV4.html 文件,从而实现自定义的登录页。这样的灵活性使得登陆页面的外观和交互可以根据项目需求进行定制。

  2. 自定义导航栏: 在 app/view/component 目录下,开发者可以重写 jhMenuV4.html 文件,以实现对导航栏的自定义。这包括导航栏的样式、布局以及其中包含的链接和菜单项等内容,使得导航栏能够更符合项目的整体风格和需求。

  3. 自定义模板: 在 app/view/template 目录下,开发者有机会重写 jhTemplateV4.html 文件,以实现对模板的自定义。模板通常包括页面的整体结构、布局以及与后端数据的交互方式,开发者可以根据项目的特殊需求进行定制,从而更好地满足业务要求。

  • 后端扩展性
  1. 自定义中间件:中间件是一种可以在请求处理过程中执行的函数,开发者可以根据业务需求编写中间件,并将其应用于特定的路由或全局中,以实现各种自定义功能。详情参考 05_JianghuJS自定义中间件
  1. 自定义service:开发者可以在 app/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. }
  1. 覆盖登录逻辑:在 app/service.js 里重写 passwordLogin 即可。按照登录的resource配置,如果没有service、action的话,创建对应的service和action即可。
    • 先在app/service.js下创建user.js
    • user.js里重写江湖JS里对应user.jspasswordLogin方法
  1. async passwordLogin() {
  2. // 实现逻辑
  3. }
  1. 数据库拓展性

在江湖JS的数据库层面,开发者具有灵活的数据库选择和替换权利。虽然江湖JS默认使用 MySQL 作为数据库,但用户可以根据实际需求,选择类似 MariaDB、Percona Server、Amazon Aurora、TiDB 等优秀的关系型数据库来替代 MySQL。

这种数据库的拓展性意味着用户可以根据项目的特定需求和数据库性能特征,选择适合的关系型数据库,以满足项目的性能、可靠性和扩展性等方面的要求。这也反映了江湖JS在数据库层面的松耦合设计,使得项目更具可定制性和可扩展性。