我的梦想是后端都不用写 curd,正在开发能大幅度减低 curd 甚至让前端来写 curd 的框架,希望大家多多关注与支持

2019-03-03 11:19:37 +08:00
 qiuxiaojie

经历了从模板渲染到前后端分离的时代,一直在苦苦思考,怎么样才能少干点活(大笑).在某天与前端对接接口时,突然顿悟,既然数据都是从 json 回去的,为什么不能直接使用类似 json 这样的语法来查询呢.在大胆的设想下,设计并实现了一套查询语法,给它起名为 orql(Object Relational Query Language 关系对象查询语言缩写).

就以 V2EX 举例说明一下它的用法

查询首页帖子列表,包括帖子标题 发布时间 回复数量 发帖人名称和头像以及节点名称:query post: [id, title, createAt, commentNum, user: {id, name, avatar}, node: {id, name}].

查看某帖子,包括帖子标题 内容 回复和回复人信息:query post(id = $id): [*, comments: [id, content, createAt, user: {id, name, avatar}], user: {id, name, avatar}]

发布一个帖子:add post: {title, content, user}

当然还支持其他的操作 update delete count 等,在模型方面支持 1:1 1:N N:M N:M 关联,更多的用法也可以通过在 github 中查看 https://github.com/orql/orql-mapper .如有兴趣者可以私聊,加微信大家交流,希望大家可以点一个 star 支持.

我的梦想是做一个可以让编程也自动化的程序员,擅长代码抽象和生成,希望有共同兴趣的人大家能一起交流.

10080 次点击
所在节点    Node.js
121 条回复
azh7138m
2019-03-03 14:50:09 +08:00
@notreami 把其他语言写的东西重构到 js (笑
cpdyj0
2019-03-03 14:53:23 +08:00
会想起上古时代没有后端,客户端直接 ODBC 挂数据库,需要权限控制就拿存储过程+数据库系统权限实现
otakustay
2019-03-03 15:16:41 +08:00
光看标题感觉前端和你有仇……
qiuxiaojie
2019-03-03 15:20:59 +08:00
@otakustay 有一些调皮的前端想自己折腾的时候,这个会帮到,哈哈
lynskylate
2019-03-03 15:33:55 +08:00
parse server,leancloud 了解一下,我之前也写过类似的,对接内部多个存储源,发现理想很丰满,现实很骨感。难点不在于抽象 crud,而在于后端不仅仅是 crud,有些处理必须在后端做,你前端想描述这个处理,最终还是得用 dsl 来描述,最终并不能节省时间。最后那个系统用来抽象出多个数据源的接口用来离线处理了。
ipwx
2019-03-03 15:34:16 +08:00
@qiuxiaojie API 是抽象层。API 是抽象层。API 是抽象层。

因为很重要所以说三遍。
- - - -

现在很多人遇到的项目都是单机单数据库,久而久之,就以为后端就是 CRUD 这么简单的事情。

拿掉后端,先不说上面很多人提到的安全性怎么处理的问题。

如果如果你的用户增长了,系统要升级为数据库集群层 + 应用集群层 + 负载均衡层。

如果你前端只是负责 call API,那前端那坨复杂的代码就能不动,运维同学专心做负载均衡和数据库集群,写应用的同学可以保证 API 不变的情况下升级为应用集群。如果还不够,你还可以上自研数据库的道路,比如魔改一个版本的 MySQL。

但如果你前端全包了,你想像一下,你那坨代码该怎么改?
qiuxiaojie
2019-03-03 15:39:40 +08:00
@lynskylate @ipwx 目前来说我们自己应用这些是在服务器直接写的,只是说前端可以参与,他们并没有在前端的 js 里直接调用,暴露成 api 给前端,分库分表这方面有开始在着手了,会提供一个规则,然后在这里对生成的 sql 进行自动分库分表
janxin
2019-03-03 16:19:02 +08:00
分布式事务怎么做?
xuanbg
2019-03-03 16:24:34 +08:00
@qiuxiaojie 通过模板建立项目怎么会导致维护困难?这个点无法理解。。。模板起的作用无非是提供一个规范的框架结构和一些可能用得上的代码而已,后面该怎么写还是怎么写。
qiuxiaojie
2019-03-03 16:31:08 +08:00
@janxin 目前的计划是提供分库分表的简单支持,分布式事务得依赖第三方中间件或者使用 newsql 做后端数据库
qiuxiaojie
2019-03-03 16:32:20 +08:00
@xuanbg 就像写代码写一个函数不用库使用复制的方式,一旦调整或者优化就会带来很大的麻烦
qiuxiaojie
2019-03-03 16:34:38 +08:00
@janxin 分布式这块的愿景是做到透明化
janxin
2019-03-03 16:47:15 +08:00
@qiuxiaojie 目前看起来就是比较简单的业务是才能适用了...这种完全可以抛开后端简单方案实现
qiuxiaojie
2019-03-03 17:05:23 +08:00
@janxin 目前这个是一个用 orql dsl 来查询的框架,还没有支持到抛开全部后端,现在项目也是通过后端编写函数来处理这样来运行,有计划在这个基础上开发一个 baas,然后复杂的业务通过函数来处理
nimrc
2019-03-03 17:09:31 +08:00
和我想法类似 之前也开发过 baas
nimrc
2019-03-03 17:10:19 +08:00
难点在于权限控制
deletelazy
2019-03-03 17:10:22 +08:00
serverless 了解一下
daryl
2019-03-03 17:12:39 +08:00
没有银弹
qiuxiaojie
2019-03-03 17:17:57 +08:00
@nimrc 目前是通过路由直接控制权限,前端不能直接执行语句
qiuxiaojie
2019-03-03 17:21:23 +08:00
@daryl 是的,没有银弹,现在只是一个对数据库操作的 dsl,专注的是提升效率和减低门槛,并不能解决全部问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/540508

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX