说明
图最原始的用来管理结构其实是最实在的,例如git本质就是用图(树)在管理多个版本。所以有理由相信,使用图可以解决很多基本的问题。
反过来想,过去很多问题没有解决(好)应该是方式不对。
以下以neo4j作为图库,梳理一下使用图进行交互式编程的思路。我觉得neo4j作为图库可能也不是最好的选择(天然排斥java),但在小规模应用下无所谓了,neo4j还是提供了一个很友好的web管理页面。
图(库)的应用点:
- 1 可视化
- 2 可编辑性(web send json to DB)
1 内容
先把图分为「静态节点图」和「动态节点图」两种。
静态节点图: 每个节点只有属性,其属性的改变来自外来的编辑。属性分为元数据属性和数据属性,元数据属性又会进一步细分,例如基础属性和状态属性。
动态节点图:每个节点有属性,还有方法。节点属性,甚至方法的变化来自于节点,外部数据不能直接作用于节点,而是要通过节点方法。
以下罗列三个可能的应用。
- 1 H5元素生成(静态图):通过图的方式编辑、表达H5元素的结构。
- 外部程序可以快速基于结构建立真实的H5元素。
- 结构可以并入更大的结构。
- 2 数据关系存储(静态图):通过图的关系表示数据(集/对象)之间的依赖关系。
- 数据处理流程可以清晰的定位和修改这种关系。
- 每种关系的类型诸如转换,存储等。
- 每个具体的属性都是函数节点,函数节点之间则是import关系。
- 3 模板状态机(动态图):
- 每个节点都是一个状态机。
- 每个状态有若干属性和若干方法。
- 每种属性和方法都收到模板限制。
每个小阶段的操作之后,与数据库(neo4j)交互
传统编程基本上就是代码编辑、终端交互执行,后台主要和内存打交道。图编程需要加入读库和写库的环境,以及打开浏览器进行筛选和查询。
编程的结构顺着图的结构,代码编写只关注某个具体的点。
在过去,程序员最头疼的是一旦程序出了问题或者需要修改,不知道从哪改起,不知道会触发哪些意外的变化。
2 例子
制程(Schema)代表了做某一件事的方法,包含了结构和具体参数。在这里,对应子图(Subgraph)的概念。
生成H5元素的图编程方法
- 1 根据schema_id 从图库中获取子图
- 2 初始操作,筛选content不为空的节点。
- 2.1 根据节点属性/H5元素规范,生成新的content (H5代码)
- 2.2 将处理过的节点打上标记,processed = True。
- 2.3 将节点根据其父节点进行分组
- 如果某元素独享一个父节点,直接把新的content赋给父节点的content属性
- 如果多元素共享一个父节点,按照节点原本的序号将content连接起来赋给父节点的content属性。
- 3 迭代操作,筛选content不为空的节点,重复2的操作直到子图为空。
– 具体代码后补–