我的梦想是后端都不用写 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 支持.

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

10092 次点击
所在节点    Node.js
121 条回复
xingxing09
2019-03-03 23:21:23 +08:00
永远信不了端上来的数据
qiuxiaojie
2019-03-03 23:35:48 +08:00
@xingxing09 是的,所以没有在前端的代码里直接执行
kajweb
2019-03-04 00:14:58 +08:00
微信小程序云开发?
gavinjou818
2019-03-04 08:18:55 +08:00
突然感觉不会是这好事。。如果命令在前端被修改了会怎么办?数据会不会泄漏问题
qiuxiaojie
2019-03-04 08:54:33 +08:00
@kajweb 可以用于微信小程序开发
qiuxiaojie
2019-03-04 08:56:10 +08:00
@gavinjou818 我在附言里面解释过了,这是一个 orm 框架,建议是在后端使用,当然如果前端非要用做好控制也不是不可能,但是不建议
passerbytiny
2019-03-04 09:06:59 +08:00
我以前见过更简单的,给了表结构,能自动生成全套 CRUD,包括界面,前端后端都可以扔了,弄个运维就够了。然而,绝大部分功能不是只有 CRUD,所以前后端还好好活着。
jxgccaaron
2019-03-04 09:08:44 +08:00
玩玩还行,真的用起来各种非 curd 场景不满足,而且为了满足一些小特性,开发起来还是蛮大工作量的,所以还比不上 curd 快
qiuxiaojie
2019-03-04 09:16:56 +08:00
@passerbytiny @jxgccaaron 看一下附言,生成全套 curd 是不可能的事情,十几张表组合起来的数量就很惊人了,另外这是一个 orm 框架,非 curd 本身就是不支持的.
reus
2019-03-04 09:33:27 +08:00
是 CRUD,不是 CURD
fy
2019-03-04 09:39:41 +08:00
GraphQL 了解游戏王

另外我有过相关的实践,后端权限配置+Model 写好自动生成 api 接口,只不过没文档就不细说了
Ritr
2019-03-04 09:42:28 +08:00
@fy 我也实践过,只是没加权限。现在有好多现场的框架可以是实现楼主先需求
qiuxiaojie
2019-03-04 09:58:46 +08:00
@reus 谢谢指正
qiuxiaojie
2019-03-04 10:01:02 +08:00
@fy @Ritr 在设计语法的时候参考了 graphql,但是两者目标不一样,graphql 是前端向后端描述需要的数据结构,orql 是后端向数据库描述需要的数据结构,你可以对比一下两者的语法和上手难易度.
t2doo
2019-03-04 10:08:07 +08:00
CURD 数据库增删改查,CRUD 计算处理时增删改查,这 2 种是 1 种东西还是 2 种东西,好苦恼:P
kwanCCC
2019-03-04 10:12:59 +08:00
我有一个梦想是 前端 不用写 CRUD,
正在开发能大幅度减低 curd,
甚至让 后端 来写 curd 的框架,希望大家多多关注与支持
sarlanori
2019-03-04 10:41:47 +08:00
之前微博上有个数据库大神 **zhh-4096** 撸了个前端数据库操作框架 `lealone-js`,了解一下: https://github.com/lealone/Lealone-Platform/tree/master/lealone-js/src/test/js

```
<!doctype html>
<html>
<head>
<script src="sockjs-1.1.2.js"></script>
<script src="lealone-5.0.0.js"></script>
<script src="generated/model/User.js"></script>
</head>
<body lang="en">
<h1>Frontend crud test, see console log</h1>
<script>
var cb = function(message) {
console.log(message);
}
User.dao.delete(cb);

// insert
new User().name.set("zhh").phone.set(123).insert(cb);
// find one record
User.dao.where().name.eq("zhh").findOne(cb);
// update
User.dao.notes.set("a notes").phone.set(123).where().name.eq("zhh").update(cb);
// delete
User.dao.where().name.eq("zhh").delete(cb);
new User().name.set("u1").phone.set(123).insert(cb);
new User().name.set("u2").phone.set(123).insert(cb);
User.dao.findCount(cb);
User.dao.where().name.like("u%").findList(cb);
</script>
</body>
</html>
```
fcoolish
2019-03-04 10:47:14 +08:00
把数据库查询放到前端来做,那事务控制,权限认证,和数据一致性怎么保证,还有后端高并发的限流熔断,你都直接查数据库了,后端怎么控制。这都是很常见的问题把,我觉得前端做好数据渲染和界面交互就行了。
xmbaozi
2019-03-04 10:51:55 +08:00
不会真都以为后端只写 curd 吧
qiuxiaojie
2019-03-04 10:53:02 +08:00
@sarlanori 比较一下你就会发现这种链式的查询操作是很繁琐的
insert => add user: {name}
update => update user(id = $id): {name}
delete => delete user(id = $id)
count => count user
like => query user(name like 'u%'): [*]
我把你写的用 orql 写了一下

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

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

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

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

© 2021 V2EX