功能点

https://www.yuque.com/docs/share/b2744453-e825-4078-b4f0-501df37d7868?# 《功能点梳理》

结构

低代码系分 - 图1


模块说明

Core

项目的核心模块,主要由3部分组成:

  • Repository接口: 定义操作db的核心方法, 例如query,execute,配置dataSource等
  • Service接口: 定义项目的核心方法,以提供给业务层和内部rpc服务调用
  • CoreModel模块: 定义项目内部使用的POJO模型或者只有内部才会使用的常量,枚举等

core模块里面没有代码的具体功能实现, 只是对功能的形式进行定义, 并且core模块不应当依赖于其他任何一个模块,它是底层服务的入口,真正的业务层将依赖于core模块来实现功能

ServiceImpl

依赖于core模块, 功能上用于实现core模块中的service接口.
这个模块代码实现的内容包括:

  • 动态选择LowCodeRepository的实现 - 这个功能的位置待定,暂时放在这里
  • 组合调用core中的LowCodeRepository接口, 完成低代码相关db操作,例如调用一个建表的方法
  • 调用DAP/Mapper存储业务数据, 例如页面配置的表信息,查询方式等, 可以采用jpa等通用db交互方式

这块的代码实现之后, 理论上来说是不太需要再修改的

LowCodeRepositoryImpl

依赖于core模块, 功能上用于实现core模块中的LowCodeRepository接口,是动态数据库操作的核心
这个模块具体的功能应当包括:

  • db记录和项目模型的转换
  • 生成db操作的具体语句
  • 发送语句交给db执行

该模块可以有复数个, 每种db理应对应一个实现,当需要连接新db时,新加一个该模块
需要注意管理dataSource的写法

bizData

一般db操作, jpa,tkmapper都行, 其实可以放在serviceImpl里面而不是单独抽一个模块.
但是考虑到也许以后LowCodeRepositoryImpl的复杂实现可能会依赖于db, 所以将它抽出来.
与数据库交互的实体类, 应该有一个公共的父类, 存有id,时间等基本字段

bizModel

对外暴露的POJO模型定义

biz

业务代码模块,依赖于bizModel模块和core模块
这个模块包括功能类似下面这些:

  • 参数校验
  • 出入参包装/转化
  • 复杂的业务逻辑
  • 对第三方功能的调用和结果处理(第三方服务应该专门抽一个模块)

    infrastructure

    专用于提供对内rpc服务的模块, 其他微服务有可能也需要调用低代码的功能,通过该模块提供出去
    理论上的功能应当是大于等于biz层封装的功能的

    对外入口

    应当有三种对外入口

  • api: 提供给前端访问的api服务, 只提供biz里面的功能

  • sdk: 是对api的封装,提供sdk的形式调用接口的可能, 参照alipay
  • rpc: 通过OpenRemote把服务当rpc服务提供出去, 看需要增加功能

理论上来说, 项目整体完成后, 只需要维护这部分入口代码即可

bizData类图

实现功能所需的数据库表应当包含以下几个个方面:

  1. 表结构存储所需的, 例如列, 索引, 校验用到的表
  2. 语法存储所需的, 例如定义复杂查询
  3. 表单的存储结构, 用于存储页面对表单的设计
  4. 人的属性和语法的关联关系表, 例如用户创建了哪些表, 用户创建了哪些sql语句, 哪个表单用哪个sql

下图中省略:id,createTime,modifyTiem,createBy,modifyBy五个基本字段,待定:是否要软删

表的基本存储结构

需要讨论具体提供哪些类型 低代码系分 - 图2

语法的存储结构

可以是查询某种表单, 也可以是查询某个列表

参考页面

暂时只抄下图里面的几个功能
image.png

sql示例

  1. 1.1【插入单行】 - 新增
  2. insert into <表名> (列名) values (列值)
  3. 例:insert into Strdents (姓名,性别,出生日期) values ('开心朋朋','男','1980/6/15');
  4. 【前端传入值】
  5. schemaId,List<ColumnName>,List<rowValue>
  6. codes(insert)
  7. 1.2【插入多行】- 导入/仅新增
  8. insert into <表名> (列名) values (列值),(列值) * n次循环
  9. 例:insert into Strdents (姓名,性别,出生日期) values ('开心朋朋','男','1980/6/15'),('开心朋朋2','男','1980/6/15');
  10. 1.3【修改单行】- 编辑
  11. update <表名> set (列名) = (列值), * n次循环 where id = <rowId>
  12. 例:update emp set sex='男';
  13. 【前端传入值】
  14. schemaId,List<RowParam(列名,value)>,rowId
  15. codes(update-where)
  16. 1.4【删除单行】- 删除/仅支持删除指定行
  17. delete from <表名> WHERE id = <rowId>
  18. 例:delete from emp where id = '1';
  19. 【前端传入值】
  20. schemaId,List<RowParam(列名,value)>,行id
  21. codes(delete-where)
  22. 1.5【查询全部/部分】- 导出
  23. select <列名> * n次循环 from <源表名>
  24. 例:select name,address,email from students;
  25. 1.6【条件查询】
  26. select <列名> * n次循环 from <源表名> where (<列名> <column-condition > <页面输入值>) <where-condition> * n次循环
  27. 例:select name,address,email from students
  28. 1.7 join连接】
  29. select <列名> * n次循环 from <源表名> join <目标表> on <源表column> = <目标表column>
  30. 例: select * from Info join Nation on Info.Nation = Nation.Code
  31. 1.8 【子查询】
  32. select * from Info where Nation = (select Code from Nation where Name='汉族') 两个查询 一个查询的结果当做另一个查询的条件 查一个 =
  33. select * from Info where Nation in (select Code from Nation where Name='汉族' or Name='苗族')

类设计

SqlGrammer : sql语法表

  • codes属性, ,例如 select-where/ select / select - join - where,
  • type属性, basic所有表通用,不允许修改, advanced是用户创建的可以修改
  • whereCondition, 当type为advanced时,需要指定本语法where条件的连接方式 不支持and和or的复杂混用

SqlTemplate : sqlCodes 对照表, 这个或许可以不用表的形式

  • code, code代表语句中用到了哪些具体的sql语法, 例如select , where , order
  • value, 某个code对应的语法模板, 例如join xxx on xxx

GrammerColumn: 语法列配置表
保存语法对列的查询方式, and/join/in这些都放在一起, 只要查询这一次就够了

  • type, 当前列的配置是对哪一部分生效, 例如指定查询某几列, where条件中的列等
  • columnId,列id
  • columnCondition, 如果是where条件, 则页面配置的时候会有连接条件
  • value, 如果是where条件, 则页面配置的时候会有值
  • order, 列在sql中出现的顺序
  • son,是否有子查询的标志 column in/= (子查询)
  • sonSqlGrammerId,如果有子查询, 子查询的sql语法组装
  • targetSchemaId, 如果有join查询, 具体join那张表的id
  • targetSchemaId, 如果有join查询, 具体join目标表的哪一列

UserGrammerRelation: 用户和语法的关系表

  • userId用户属性标识, 和人相关的一个属性, 具体是哪个值待定
  • 语法的存储应当是无属性的, 与业务的关联管理在本表中
  • schemaId: 本条语法创建在哪张表上 低代码系分 - 图4

    表单存储结构(暂不实现)

    参考以下内容

    图表设计

    image.png

    表单设计

    image.png

    数据结构

    低代码系分 - 图7

    db配置

    低代码系分 - 图8

    项目规范

    异常标准

    抛出的异常信息,应该包含以下内容 ```java 抛出异常的模块/异常的级别/异常code/异常描述 例如: SERVICE-5-NOTFOUND-没有找到模板

``` 该异常信息抛出后页面不显示, 前端根据异常code自行决定显示方式
或者只返回异常code, 其他信息写在log里

日志标准

  1. 需要能够输出执行的sql
  2. 需要能够输出某些方法的出入参
  3. 需要能够随时开启和关闭某种日志
  4. 需要确定统一日志格式