从0开始搭建低代码平台系列(系统设计与规划)

1,863 阅读4分钟

前言

什么是低代码?低代码开发是种通过可视化进行应用程序开发的方法,使具有不同经验水平的开发人员可以通过图形化的用户界面,使用拖拽组件和模型驱动的逻辑来创建网页和移动应用程序。这些工具通过减少手工编码的工作量来帮助快速开发应用程序,提高开发效率。

这是从网上抄来的大概念,这里我来谈谈我对低代码的看法,首先低代码有么有存在的必要,答案是有的。

这里方便分析就拿一个管理系统为例子,也许A公司需要一个管理系统,公司接下了,然后后面B公司也需一套类似的系统,公司有需要基于框架去定制,其实我们通过分析不难发现,A公司和B公司其实有重合需求的部分,而这部分我们是可以利用的,也就是通过低代码生成实现共用。

再来一次例子,活动运营页面的开发,这类页面生命周期短,而收益也不高,如果专门投入前端同学去做,会有些大材小用,这里假如存在一个低代码平台,这样只需要运营小哥哥,小姐姐拖动一下鼠标就能完成设计何乐而不为呢?

技术选型

既然这是一个平台那么久涉及到了前端和后端,我们需要对前后端进行技术选型。

前端:react + typescript

后端:java

数据库:mysql

没啥特殊原因,因为我擅长写react所以我就选了react + ts的组合。

平台架构设计

一个平台的设计好坏直接决定了这个平台今后的可扩展性,所以在这一点来说需要慎重考虑。

下图是我的一个简单的架构设计(有不同意见的小伙伴也可以在评论区点评)

首先整体的web作为输出的一层独立存在,然后就是核心部分Core的代码。

关于Core

ServiceAPI为开发者暴露给用户可二次开发的接口。

Service是整个CodeDesgin核心服务所在,所有的接口实现都在这一层。

Render层是分情况渲染的支持,主要是组件的多样性导致我们无法通过一套代码去完成兼容(或者说能做到兼容,但是将无比的复杂)

UIStore存储,这里其实要配合Service中的一个UIService进行使用,因为我们是个低代码平台,不仅仅要保证代码能在网页上展示出来,也要能存储,能部署所以这里我就设计了一个UIStore,大家可以把它看作CodeDesign的数据层吧,这个UI Store将会对用户拖动产生的界面进行数据存储,用来保证能够在其他平台进行还原。

关于其他

Utils:CodeDesgin中用到的一些工具类的集合,这里偷懒就没有一一列出。

http request:网络请求库,主要是在进行一些操作的时候,将数据送到后台去

store:本地存储,因为这里初期不计划实现实时更新到后台,所以为了保证用户的数据不丢失,这里我在本地做了存储操作,保证在一些特殊情况下能够快速恢复用户之前的操作。

数据结构设计

设计代码如下

/**
 * 菜单组
 */
export interface MenuGroup {
    name: string;
    key: string;
    children: RenderMessage[];
}

export interface RenderMessage {
    key: string;
    name: string;
    type: string;
    icon: string;
    dom: RenderDOM;
}
/**
 * DOM数据结构
 */
export interface RenderDOM {
    domType: string;
    type: string;
    class?: string;
    value?: string;
    placeholder?: string;
    isDisabled?: boolean;
    size?: {
        rows?: number,
        cols?: number
    };  // 显示行数,多行文本框需要   
    children?: RenderDOM[]; // 可能存在多层级嵌套(当然也可能是存在多个孩子节点)
}

因为设计是基于antd样式库实现,所以这里通过分析发现antd在渲染最终组件的时候会通过三层div去渲染,这里我们需要做的就是定义出这三层数据结构,让我们的代码能够生成。

核心在于RenderDOM的定义,这是渲染整个DOM结构的关键数据结构,他是一个树形结构,而且是一个多叉树,所以这里在解析的时候,我们需要根据dom节点的层级和顺序,按需加载。(暂定采用的是DFS算法进行解析)

最后

完成了上述的准备工作,我们心理已经对一个代码平台的雏形有了初步规划,下一步我们就可以开始开发啦。这里补充下,因为本人是个直男,所一ui界面参考了ruoyi ui的设计,自己做了一些功能上的扩展。

代码地址

还在开发中~~~

github.com/guanjiangta…