原子基本概念

2018-11-28 03:03:14

原子是什么

原子是Cabloy最基本的要素,如文章、公告、请假单,等等

为什么叫原子?在化学反应中,原子是最基本的粒子。在Cabloy中,通过原子的组合,就可以实现任何想要的功能,如CMS、OA、CRM、ERP,等等

原子的意义

正由于从各种业务模型中抽象出来一个通用的原子概念,因而,Cabloy为原子实现了许多通用的特性和功能,从而可以便利的为各类实际业务赋能

统一存储

所有原子数据的基本信息都统一存储到数据表aAtom中,与业务相关的字段存储在业务表中,如testTodoaAtom业务表是一对一的关系

这种存储机制体现了共性差异性的有机统一,有如下好处:

  1. 可统一配置数据权限
  2. 可统一支持增删改查等操作
  3. 可统一支持星标标签操作

aAtom核心字段清单

名称 类型 缺省值 说明
id int 自动增量 关键字段,其他表中引用此字段,名字一般为atomId
createdAt timestamp CURRENT_TIMESTAMP 原子创建时间
updatedAt timestamp CURRENT_TIMESTAMP 原子修改时间
deleted int 0 软删除标记
iid int 0 实例id
itemId int 0 对应的业务表条目Id
atomEnabled int 0 原子状态,0:草稿 1:正常
atomFlag int 0 原子标记,与原子扩展指令相关
atomClassId int 0 对应的原子类型
atomName varchar NULL 原子标题
userIdCreated int 0 创建原子的用户
userIdUpdated int 0 修改原子的用户
allowComment int 1 是否允许评论
starCount int 0 点赞数量
commentCount int 0 评论数量
attachmentCount int 0 附件数量
readCount int 0 阅读次数

原子类型

原子类型是原子对应的元数据信息,在模块的meta中设置,如模块test-todo中原子类型todo的元数据信息如下:

src/module/test-todo/backend/src/meta.js

const meta = {
  base: {
    atoms: {
      todo: {
        info: {
          title: 'Todo',
          tableName: 'testTodo',
        },
      },
    },
  },
};
名称 说明
title 原子类型的标题
tableName 原子类型对应的业务数据表名称,也可以是视图名称

原子星标、标签

可以对原子设置星标,也可以添加不同的标签,方便对原子快速分类、整理,以及查看

原子草稿

原子有两种状态:草稿正常 新建的原子处于草稿状态,当提交之后处于正常状态。

状态 说明
草稿 只有创建人可以操作,其他人均看不到
正常 只有分配了相应权限的用户才可以操作相应的指令。创建人始终可以查看自己创建的条目,但是如果没有分配权限,就无法操作修改删除等指令

基本API路由

核心模块a-base统一封装了草稿的逻辑,后端路由配置如下:

a-base/backend/src/routes.js

{ method: 'post', path: 'atom/enable', controller: atom },

扩展API路由

业务模块只需提供扩展逻辑路由,以便在提交正常状态时做一些特别处理。如模块test-todo的路由配置如下:

src/module/test-todo/backend/src/routes.js

{ method: 'post', path: 'todo/enable', controller: todo, middlewares: 'inner' },

扩展逻辑

src/module/test-todo/backend/src/service/todo.js

enable

enable扩展逻辑一般为空。当使用了扩展指令原子标记时,一般在enable中切换原子标记

async enable({ atomClass, key, atom, user }) {}
名称 说明
atomClass 原子所属原子类型对象
key 原子关键字: { atomId, itemId }
atom 原子对象
user 当前用户对象

公开访问

默认情况下,在正常状态下,只有被授予了read权限的用户才可以read原子条目。Cabloy提供了一个简便的特性,使得在正常状态下,用户不授予权限就可以直接公开访问原子条目

开启公开访问只需要一个步骤:

src/module/test-todo/backend/src/meta.js

base: {
  atoms: {
    todo: {
      info: {
        title: 'Todo',
        tableName: 'testTodo',
        public: 1,
      },
    },
  },
},
名称 说明
info.public=1 开启公开访问


评论: