智能生成云端一体代码,提升小程序开发效率

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 智能生成云端一体代码, 提升小程序开发效率 崔红保 DCloud CTO
2.
3. 自我介绍 崔红保 跨平台开发老兵,从早期的j2me/symbian/blackberry等平台的兼容适配, 到后来的iOS/Android/Hybrid App/小程序,一直在深度参与,并持续输出 解决方案,帮助开发者更轻松。 现任DCloud CTO,uni-app产品负责人
4. 开讲之前
5. 我们先评估个需求
6. 开发一个云端通讯录需要几天? 需求清单: ❖ 前端+后端 ❖ 数据入库 ❖ 多平台支持
7. 10分钟?
8.
9. • 前/后端协同模式演变 • 小程序云开发的先进性和局限性 • uniCloud的改进探索 • 智能生成小程序代码(Schema2Code) • 未来的轮子生态
10. 第一阶段:1990 ~ 2005年 ASP/JSP/PHP 1990年:HTML诞生 动态网⻚ JavaScript 脚本 CSS 样式 1995年前后
11. 第二阶段:2005 ~ 2018年 后端 大 前 端 web App 原生App PC Mobile iOS App Android APP 小程序 微信 阿里 百度 字节跳动 • 起源:Ajax • 成熟:移动互联网 • 特点: ❖ 用户体验好 ❖ 开发效率低
12. 第二阶段:跨端渐成主流 跨端框架
13. 第三阶段:2018 ~ 今天 // todo.vue前端⻚面 db.collection("todos") .doc("todo-item-id") .get({ success: function(res) { console.log(res.data) } }) • 无需搭建服务器 • 业务前移:前端直接操 作数据库 • 特点: ❖ 用户体验好 ❖ 开发效率高
14. 前后端分离代码执行流程 构造UI,响应交互 监听请求,解析参数 校验参数合法性 校验用户权限 拼装参数,请求后端 校验参数合法性 连接DB,执行CURD 接收后端响应,反馈给用户 返回结果给客户端
15. 云开发代码执行流程 构造UI,响应交互 校验参数合法性 重 前 端 拼装参数,请求后端 连接DB,执行CURD 反馈结果给用户 轻 后 端
16. 前后端工作演变 第二阶段 第一阶段 前后端分离 后端 前端 第三阶段 云开发:业务前移
17. 云开发更高效,但尚存缺陷
18. 前序:云开发真实执行逻辑 构造UI,响应交互 校验参数合法性 API GW监听请求,解析参数 校验用户权限 拼装参数,请求后端 连接DB,执行CURD 连接DB,执行CURD 反馈结果给用户 返回结果给客户端 根据预先配 置的collection的安全规 则校验
19. 小程序云开发 - 表级权限,场景受限 挑战1:积分大于50的注册用户,才能评论文章 挑战2:仅管理员可设置精华帖,阅读量系统自增
20. 小程序云开发 - 参数合法 构造UI,响应交互 构造UI,响应交互 互 不 拼装参数,请求后端 拼装参数,请求后端 信 连接DB,执行CURD 任 校验参数合法性 校验参数合法性 反馈结果给用户 接收后端响应,反馈给用户 API GW监听请求,解析参数 监听请求,解析参数 校验用户权限 校验用户权限 校验参数合法性 连接DB,执行CURD 连接DB,执行CURD 返回结果给客户端 返回结果给客户端 入库前缺数据校验
21. 小程序云开发 - 数据割裂 其他平台 特点: 微信 支付宝 百度 用户 云数据库 云数据库 云数据库 数据库 ❖ 仅个别小程序厂商支 持,私有规范 ❖ 数据分散存储在多个数 据库中,运营统计困难
22. uniCloud的改进探索
23. No.1:跨云跨端 腾讯云 云开发 阿里云 小程序Serverless 亚⻢逊 lambda uniCloud SDK 云端的跨厂商引擎 前端的跨平台框架 uni-app runtime 微信 小程序 阿里 小程序 百度 小程序 字节 小程序 原生 App web App
24. No.2:规范制定 权限配置 JSON Schema 字段校验 组件绑定 http://json-schema.org
25. No.2:精细权限 积分大于50才能创建 "permission": { 表级权限 "read": true, "create": "auth.uid != null && get(`database.uni-id-users.${auth.uid}`).score>50”, "update": "doc.uid == auth.uid", "delete": "doc.uid == auth.uid || ‘newsAdmin_ID’ in auth.role” }, "properties": { "view_count":{ "permission": { "update": false } } } ⻆色校验 字段级权限 改进点: ❖ 字段级权限控制 ❖ 更丰富的JS运算表达式 ❖ ⻆色、权限关联
26. No.2:字段校验 { "properties": { "username": { "bsonType": "string", "trim": "both", "minLength": 3, "maxLength": 15 }, "age": { "bsonType": "int", "minimum": 0, "maximum": 125, "defaultValue": 0 }, "mobile": { "bsonType": "string", "description": “电话", "pattern": "^\\+?[0-9-]{3,20}$" } } } 自动去除空格 字符串最小⻓度 数字最大值 默认值 正则校验
27. no.3:clientDB云端一体装置 云数据库 开发者云函数 … 开发者云函数 clientDB通用云函数 uniCloud SDK clientDB前端SDK uni-app runtime 微信 小程序 阿里 小程序 百度 小程序 字节 小程序 原生 App web App
28. uniCloud - clientDB数据组件 // clientDB组件方式 <unicloud-db collection="article" where="catagory=='news'" field=“title,summary,create_date"> </unicloud-db> 组件方式 // clientDB JS API const db = uniCloud.database() db.collection('article') .where("catagory=='news'") .field('title,summary,create_date') .get() .then(console.log) .catch(console.error)
29. uniCloud - 前端操作数据库执行逻辑 API GW 监听请求 校验用户权限 schema A 校验字段合规性 schema B 如:开启DB事务 执行action.before schema C 如:阅读数+1 连接DB,执行CURD page A 如:非空、⻓度限制 page B page C 前端⻚面 返回结果 给前端 执行action.after clientDB公共云函数 json-schema
30. 降本增效成果示例 构造列表 clientDB组件直接查询DB,无需request请求 代码量对比: ❖ 传统开发:90行 ❖ uniCloud:32行 ❖ 联网请求 节省代码量:58行,占比60%
31. uniCloud的改进总结 • 打破仅小程序支持云开发的限制,扩展到全端 • 抹平云厂商的接口差异,实现跨云的Serverless引擎 • 基于JSON Schema扩展规范,精细权限和字段约束 • 封装clientDB数据组件,节省代码量,提高开发效率
32. 智能生成代码,进一步解放生产力
33. uniCloud项目特点 API GW 监听请求 page A 如:非空、⻓度限制 page B • uniCloud鼓励将DB及业务逻辑写在前端代码中, schema A 校验用户权限 项目重心在前端 • clientDB是一个通用的公共云函数,操作权限及业 校验字段合规性 schema B 务数据安全校验由clientDB云函数从schema中解 析并执行 执行action.before 如:开启DB事务 • page C 前端⻚面 如:阅读数+1 返回结果 给前端 schema C uniCloud项目的代码生成,重点是前端代码的生 json-schema 连接DB,执行CURD 成,不涉及云函数等后端代码的生成 执行action.after clientDB公共云函数
34. Schema2Code:以表单为例 构建表单 表单组件列表 • label定义 • placeholder • 组件类型 • 默认值 • 组件顺序 • 必填标志 • 校验表单 非空校验 • 最小⻓度 • 最大⻓度 • 手机号校验 • 邮箱校验 • 错误提示 • 同云端入库字段校验 json schema 提交表单 uni.request 无需接口提交, 前端操作数据库 clientDB
35. Schema2Code:以表单为例 { "bsonType": "object", "required": ["username", "mobile"], "properties": { "username": { "bsonType": "string", "title": "姓名", "description": "姓名", "order": 1, "trim": "both" }, "gender": { "bsonType": "int", "title": "性别", "order": 2, "defaultValue": 0, "enum": [{ "text": "未知", "value": 0 }, { "text": "男", "value": 1 }, { "text": "女", "value": 2 }] }, "comment": { "bsonType": "string", "title": "备注", "component": { "name": "textarea" } } } } 必填字段 label定义 placeholder定义 组件顺序 默认值 组件类型
36. Schema2Code:表单构建 "required": ["username", "mobile"], "properties": { "username": { "bsonType": "string", "title": "姓名", "description": "姓名", "order": 1, }, “comment": { "bsonType": "string", "title": "备注", "component": { "name": "textarea" } } } <uni-forms ref="form" :value="formData" validate-trigger="submit" err-show-type="toast"> <uni-forms-item name="username" label="姓名" required> <input placeholder="姓名" v-model="formData.username" trim="both" /> </uni-forms-item> <uni-forms-item name="comment" label="备注"> <textarea @input="binddata('comment', $event.detail.value)" class="uni-textarea-border" :value="formData.comment" trim="both"></textarea> </uni-forms-item> </uni-forms>
37. Schema2Code - 动态枚举及扩展组件 "nation":{ "enum":{ "collection":"nation-china", "field":"name as text,_id as value" }, "componentForEdit":{ "name":"uni-data-picker" } } "address":{ "enum":{ "collection":"city-china", "field":"name as text,_id as value" }, "enumType":"city-china" }
38. Schema2Code - 小程序管理后台 • • • 列表分⻚、关键字搜索 新增、修改、删除、详情 批量操作
39. 未来的组件生态
40. 前后分离的轮子割裂 React 前端 Ant Design Material-UI 后端 Vue Element vant Mint UI uni-ui swiper Bootstrap Laravel Express Spring yii Egg.js Hiberate mongodb oracle mysql
41. 云端一体的组件,搭积木更快 DB Schema DB Schema DB Schema DB Schema 云 端 云函数 前 端 前端组件 banner组件 前端组件 升级组件 云函数 前端组件 搜索组件 前端组件 一键登录
42. 总结 • 历史:前端开发模式演变,业务逐步前移 • 现状:云开发更高效,但有局限,业务受限 • 探索1:跨云跨端、精细化权限、严格字段校验、前端数据组件 • 探索2:基于云开发模式下的代码生成思路 • 未来:基于业务的、云端一体的组件生态
43. 拒绝重复, 做个高效的`懒人`
44.
45.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-17 02:50
浙ICP备14020137号-1 $Map of visitor$