[Proposal]: 问题与展望
开放中
[Proposal]: 问题与展望
Created by: snowyu
从功能上看Steedos是国内开源低代码平台最完善的,站在了巨人的肩膀上,吸收了SaleForces低代码平台的许多优秀的经验.真正做到了开箱即用. 有望成为国内乃至国外领先的开源低代码平台黑马.
问题
拍马屁的话就不多说了. 下面从代码和功能层面上谈谈不足之处:
从代码上看:
- 虽然开源,但是开源社区没有做起来,全是自己在维护更新代码,原因如下
- 使用了不下三种语言: js, coffeescript, typescript
- 缺少统一的开发 Language Style 规范.
- 自行维护的库包太多,让有心加入的开发者难以下手
- 如果对第三方库包有说改进,应该遵循开源做法,Fork and PR. 而不是直接复制到自己的项目中.
- 缺少自动化的单元测试
- 进而导致:
- 维护复杂度高
- 库包升级麻烦(如 meteor)
- 因为很难区分哪些是自己开发的,哪些是第三方开发的,从而很容易引发 DMCA(Digital Millennium Copyright Act) 版权纠纷.
- 使用了不下三种语言: js, coffeescript, typescript
- 严重依赖于 Meteor
- 剥离 Meteor 依赖, 只需保留 Meteor 的用户认证作为向下兼容的微服务.
- 例如有人已经把Meteor-AutoForm从meteor剥离出来作为Reacto-Form
- 而内部代码又严重依赖于 Creator
- 导致库包通用程度不高, 比如
objectql
过于依赖于本项目,根本从项目中拿不出作为独立库使用.自然就不能更好的利用开源社区.
- 导致库包通用程度不高, 比如
- Datasource不通用,内部只能用mongoDB数据源.需要重构Datasource,对第三方数据源和自己的不应加以区分,应该一视同仁都能使用.
- 数据库ORM应该同时支持 MongoDB, MySQL, PostgreSQL, SqLite
- 权限通用性还要扩展:
- 支持
view/modify
filter 指定的记录, 而不是只有modifyAllRecords
/viewAllRecords
- 支持特定字段权限, 限制只能编辑,查看记录中的某些字段
- 似乎关于限定某个子组织方可访问的权限也没在这里看到,比如子组织可以继承父组织的权限,也可以不继承自己设置.
- 支持
- MetaData 规范没有分离后端定义和前端定义, 后端的定义前端一定需要,但是前端定义后端就用不着.
- 比如字段类型中,混杂了前端的类型和后端的类型
- 分离的意义在于更好的总结规范前端的需求和后端的需求.
- 尽量规范后端的Meta字段保持数据库的通用性(NoSQL, SQL都支持)
- 规范前端的Meta字段则可以分离UI,切换不同的UI库(只要创建不同的UI适配器就可),乃至建立新的UI组件都有标准可循.
- 个人不是很喜欢DevExtremeUI库,虽然它的确好用.
- SalesForce 的 Formulas 可读性太差,这个就不要照搬吧,完全和白皮书不搭:
-
销售订单审批通过时,如果涉及多个供应商,自动分解成多个采购订单,并自动给供应商发送订单确认邮件
-
也许下面这样更方便那些不懂编程的业务人员
如果 [销售订单].审批 为 "通过" 那么 列出所有 [销售订单].[产品] 的 供应商, 产品 和 产品数量 建立 采购订单: 填入 供应商, 产品 和 产品数量 然后发送邮件给 联系人(供应商).邮件地址, 内容是 请确认采购订单
-
当然如果是从迁移讲,能完全兼容 SalesForce, 很轻松的把 SalesForce 的应用数据迁移过来,也不错.
-
- 对开源代码的限制没有说明,比如:
- 无导入数据库
- 无配置服务端的触发器
展望
使用 Moleculer 重构为微服务架构是一个好主意,这是个大工程,为啥不干脆抛开原有的架构体系,重头来过,毕竟以前的历史包袱太重. 好好梳理下库包,该扔的就扔.从架构上重新设计. 另外 Moleculer 的 DB Adapter 也是需要重写的, 它只支持单表(Collection),而这远远不够, 还需要支持:
- Collections(多表)
- Relation
- Transaction
- Migration(数据库版本更新和回滚)
最近因朋友的关系接触到中小学教育这块,而各个学校的管理差别很大,很适合lowcode的场景,本想自己写一个,没想到看到你们的项目. 看下来工具链的癖好似乎差不多: coffeescript, meteor(做原型玩过超快,show出来也酷,数据实时变化), react, typescript. 而测试这块,前端还好有用 storybook,就是需要补全测试用例.后端推荐用jest, API测试不妨试试我自己写的Api-BDD-Test,基于Cucumber, 可以用类似自然语言的方式(中文)建API测试用例.
如果您们也正想完全重构项目,打造一流低代码开源平台,超越SafesForce,那么我就没必要自己再写了,直接加入好了. 只是用上 Moleculer 是远远不够的.
简单介绍下业余写过的一些东东,本职是架构.
Created by: hotlong
欢迎大神加入,上面提到的很多问题确实是我们要改进的内容。
目前有以下几点是2.0正在处理的:
- 我们新开了一个app-builder的项目,作废meteor和creator,重写前端。暂时的进度核心控件已经实现替代。前端列表控件替换为 ag-grid,表单控件替换为 ant design pro components 。下一步整个前端可以重写。
- 权限继承方面,我们计划实现 salesforce 基于 role 上下级关系的权限继承。
- 公式的部分如果想真正实现类自然语言非常难,应该是一个独立的项目,暂时不在考虑之内。况且我们认为目前所有的无代码系统能实现的能力非常有限,完整的业务场景一定是需要程序员加入配合的,很多需求用华炎魔方写公式至少要比写代码要简单太多。
- 数据库的通用性方面,暂时不考虑内核支持传统数据源。NoSQL有天生的好处例如树状结构的数据,这是传统数据库不具备的。
Created by: snowyu
- 我们新开了一个app-builder的项目,作废meteor和creator,重写前端。暂时的进度核心控件已经实现替代。前端列表控件替换为 ag-grid,表单控件替换为 ant design pro components 。下一步整个前端可以重写。
Ok, 抽空我瞧瞧.
- 权限继承方面,我们计划实现 salesforce 基于 role 上下级关系的权限继承。
我对salesforce研究得不多, 感觉salesforce的层级权限继承的架构设计有点不好理解,不是很通用. 比如role的处理的资源对象只有三类: contacts, opportunities, and cases,这明显不合理(可能是初期CRM的遗留问题). 然后又搞了个莫名的Sharing Rules,还有Group. 另外salesforce似乎并没有实现组织的权限继承,只有分区(Divisions).
一般来说Role不就应该是
权限
和(子)角色
列表么? 而权限
则是对资源对象
的操作
约束. 例如,如下的权限表,就可实现字段限制和过滤器限制,以及角色继承复用(我的第三版角色权限规范):自有编辑: # 只能查看编辑自己创建的 - 权限模板 - ".view#creator == ${self}" - ".edit#creator == ${self}" 自有管理: # - 权限模板 - 自有编辑 - ".delete#creator == ${self}" $everyone: # 能创建帐号 - "Account.add" - "自有管理": # 如果存在参数列表,那么参数列表的值将覆盖原有角色权限表中的值 # 不能编辑查看Account资源的 password 和 isVerified 字段 - "Account[!password, !isVerified]" # 能改变自己的密码 - "Account.changePassword#creator == ${self}" 员工权限: # - 权限模板 # 可以对任意资源进行查看 - "*.view" # 限制住 Account 资源的 - $everyone 员工: # 职务 - "员工权限" # 并且不包括订单资源的 - "!Order"
当然限于对salesforce的了解有限,如有谬误,随时指正.
以上没有包括针对组织的权限继承,而我说的组织的权限继承,其目的是让组织可以自行管理自己子组织及子组织资源,完全控制自己的权限。其默认的基本原则是:
- 上级组织可以查看下级组织的资源
- 下级组织无法查看上级组织的资源
当然原则是可以打破的,我引入了资源的查看能力,来进一步约束资源的可见度:
资源查看能力的定义如下(数值越大,能力越大):
- 0 公开: 面向大众(互联网)公开。
- 10
组织
内公开: 本组织内以及该组织的下级可见 - 20
特殊组织
内公开: 本特殊组织(最左边开始的第一个,或者说第一个特殊组织)内以及特殊组织的下级可见 - 30
本组织
内公开: 本组织内可见(不含下级)以及本组织的特殊组织内可见(含特殊组织的下级)。 - 40
本特殊组织
可见: 仅限本特殊组织(最右边开始的第一个,或者说最后一个特殊组织)内可见(含该特殊组织的下级)。 - 50
只是本组织
可见,不包含任何下级组织,无论是普通组织的,还是特殊组织的。 - 255 绝密
- 公式的部分如果想真正实现类自然语言非常难,应该是一个独立的项目,暂时不在考虑之内。况且我们认为目前所有的无代码系统能实现的能力非常有限,完整的业务场景一定是需要程序员加入配合的,很多需求用华炎魔方写公式至少要比写代码要简单太多。
是的,可以跨项目使用的独立项目.于我来讲,这块难点就是语法规范的定义费思量,其它部分还好.所以准确的说是低代码系统,不过针对特定领域来说,还是蛮有效的. 真正复杂的需求,还是要添加新的方法,触发器. 至于表达式能简单点就简单点,不是更好. 超越也是从点滴做起的.
- 数据库的通用性方面,暂时不考虑内核支持传统数据源。NoSQL有天生的好处例如树状结构的数据,这是传统数据库不具备的。
尽管我个人也比较倾向NoSQL,但是还是有不少客户需要关系式数据库. 越是通用的项目,那么越要解决不同的底层需求. 其实这块只要有一个好的ORM顶在前面,支持常见的数据源并不太难. 只不过关系式数据库的弊端是不能联机升级数据库,升级migration时只能offline.
另外对于ORM,不推荐
TypeORM
,它已经正式决定不支持动态 database schema,issue都关了. 我更推荐MikroORM,数据源基本通吃,动态schema,事务,migration,性能也不错.我准备基于此重写Moleculer DBAdapter.Created by: snowyu
I have been busy with other things recently and haven’t tracked the MikroORM's progress for a while.
It can query multi-databases directly with the same connection:
Cross-database joins and cross-schema joins
Multi connections way here:
Created by: dzcpy
@snowyu Thanks for your reply. I've done a bit of research, but sadly enough, MikroORM only supports querying from different schemas dynamically, but not inserting data into a specific schema with its entity manager or repository. There is workarounds like using a query builder, but in that case all ORM related features are not available.