前言

新一代大前端利器 iofod 开放公测!应用开发领域的 Photoshop,专门为攻城师们打造的低代码开发平台,应用开发毫不费力。本文将从多个方面切入快速介绍 iofod 独特的地方,同时分享设计上的思考,希望能抛砖引玉。正文开始前先通过一段小视频感受下 iofod。

视频

布局系统

人类以自身为量尺,为万物规定了尺度,类似地,一个应用被我们分解成一个个场景(屏幕,窗口,页面),下文我们统一称之为页面。
我们把范围锁定在当前的主流媒介:屏幕。一个页面承载了当前屏幕肉眼可见的一切对象,为了更好地管理这些对象,我们发明了视图,树,层,容器等概念,按空间位置,属性给对象分类,划分范畴,在日常中我们不会直接去操作屏幕的像素,甚至使用类似操作画布的绘图原语的情况也少之又少,更多是使用更高的抽象(组件,控件等)来描述页面的内容,这更贴合人脑认知。

iofod 对大量的场景和用户界面进行分析,设计了跨平台兼容的布局系统,为布局容器提供了绝对,相对和弹性布局三板斧,结合对页面的分层管理,理论上所有的界面视图,均可以转化为这一布局系统的表达,同时具备良好的维护性,一图胜千言:

原子组件

还记得 jQuery 年代,市面上DIV+CSS一把梭到底的产品比比皆是,如今2022,iofod 用可视化这时髦的方式将其重新包装并推到舞台上(手动狗头)。根据前文所述的分层理念,层级内的容器可以再次嵌套容器,构成子布局,布局完成后,往容器内填充原子组件或者封装的组件,完成真正的界面内容,这种以层级结构来组织管理界面的方式与传统并无不同。思路虽一致,然而实现路径可谓千差万别,iofod 结合通用布局系统的三板斧,在不限制界面表现的前提下对实现方式进行剪枝,将用户的可能实现路径数压缩到可数的范围。

可以说原子组件和容器可嵌套保证了封装复杂组件以及实现任意视觉界面的可能性,抹平了界面维度与传统编程的能力差,配合有限的声明式状态表达式,实现路径甚至成为了无关要素。

JS in CSS

前端 Web 领域的 CSS 对比其他领域的CSS,其表达形式无疑是最为自由的,自由带来强大的同时,也带来了稳定性和性能问题。浏览器用大部分代码来支撑其自由度,技术团队制定规范来限制成员编写维护性或性能差的代码,许多跨平台框架通过阉割实现 CSS 子集以获取更快的渲染速度,业内出现预处理器、后处理器来弥补稳定性,模块化CSS,CSS in JS…这一切无疑在宣告 CSS 存在极大的改进空间。iofod 对此的解决方案是:摒弃命令式修改,用更纯粹的函数式与声明式来兼顾自由与稳定。

用户与界面交互,会产生指针或触控点的输入流,输入流作用于可交互的组件上如按钮,按钮接收输入流,切换自身状态为被点按的状态来响应用户反馈,此时可能还需要根据实际业务去请求后台数据,获取新的输入流,更改页面几个组件的模型数据,按钮可能要变更自身的内部状态,切换为不可点击状态…一个再平常不过的场景,命令式可以很容易翻译出有味道的代码,读者请自行尝试。在 iofod 里,按钮用一个文本组件表达,配置 $isActive 和 $disabled 分别表示按钮点按和禁用状态,配置交互点击修改变量值,根据需要新增交互步骤,这案例很直接表现声明式 UI 以及 JS in CSS 的优点。

基于该设计,我们获得优良稳定性的同时,也获得动态 CSS 的能力,表达甚至更加灵活。我们通过一个轮播效果演示下进阶的用法:

案例具体细节可参考这里

跨平台

跨平台开发的需求一直存在,不考虑性能与原生能力,Web 是目前最为强大的跨端跨平台的解决方案,并且对比原生其开发的简易程度和速度也是最高的,但开发体验终归是要让步于更好的用户体验,业界早已进行过大量探索和实践,从Cordova,React Native 再到如今的 Flutter,我们跨平台的方案更加成熟且用户体验更上一层。

在 iofod 搭建的项目,我们的目标是实现导出各个平台的代码,目前 Web & H5 支持导出 Vue2,Vue3 代码,小程序方面支持导出 Taro 代码,借助 Taro 生成国内各小程序平台应用代码,原生应用方面支持导出 Flutter 代码,借助 Flutter 生成安卓,iOS和桌面端应用代码。

极致的复用

每个技术团队对 DRY 原则的理解与实现存在差异,有类似于行政单位的划分,将代码的复用分级成片段,函数,模块,类库,框架,进行分层治理,也有观察代码在时域的变化,分离代码变化的部分与固定的部分,对固定的部分进行封装复用。我们对已有的方案综合自身情况进行考量,权衡利弊之下得出最合适的价码,两种方案中,前者对变化的判定标准很低,随时间累加会产生大量低保值的复用,甚至由于变化太快,封装完成之日就是入土为安之时,而后者,重依赖于制定代码变化标准的这个人,存在不稳定因素。

我们不妨从第一性原理出发,解决提出问题的人?(手动狗头) 假设采用前者封装的复用是高保值的资产或者低保值的同时低成本,则前者的产出是蕴含后者的,前者在 AI 时代甚至是能用机器来代替,我们把使假设条件成立的因素定义为复用成本(心智成本,维护成本,使用成本,重新生产成本等),那么复用的成本越低,则越趋近理想状态,最终达到复用之极致。

那么 iofod 采用哪些策略来降低复用成本呢?第一,抹平了平台与端的差异,原子组件在不同的宿主环境下视觉与交互统一,一次开发,到处运行,终生复用;第二,体系下封装成本,使用成本几乎没有,任意组件交互组合、业务模块,一键保存为可复用单元,所有项目可一键导入使用,无需繁复的使用手册;第三,定制成本极低,原子化组件的独立性与可组合性保证复用组件的依赖最小化,各司其职,对比同类产品,在定制化层面简直一骑绝尘;最后,复制粘贴光荣,行走的 Dockerfile,像设计师找素材一样所见即所得,社区项目零成本借鉴。

拓展体系

iofod 带来了通用界面设计开发的能力,为了最大化利用该能力创造更多价值,为开发者开放拓展能力的功能必不可少,因此拓展能力是 iofod 面世前就具备的能力。通过调研大量市面插件拓展的方案后,发现VSCode 的拓展设计理念最接近我们的理想状态:独立进程,逻辑与视图隔离和有限拓展组件。

在我们的设定中,拓展通过 Web Worker 运行于独立的线程,隔离拓展逻辑,通过 SDK 与 iofod 编辑器主界面通信,可拓展编辑时能力与导出能力,借助 SDK 提供的组件拼装拓展界面:

为了带来更好的拓展开发体验,我们提供了TS版本的 iofod-sdk,内部包含大量文档注释与代码示例,借助编辑器的智能提示,可做到无需对照文档开发。另外,可通过 CLI 脚手架工具快速创建拓展开发工程模板,感兴趣的小伙伴还可以学习下已发布的开源案例,快速上手。

实时协同

劳动分工提高了生产效率,这是工业社会的共识,而有分工的地方就有协同。20年新冠黑天鹅极大催生远程协同办公需求,成为很多企业的必需品,协同的重要性不言自明。iofod 基于 WebRTC 实现多人实时协同编辑,借助 CRDT 保证数据同步的强最终一致性,再利用 OT 算法保证数据合并能最大程度符合用户预期。

多角色参与协同

(代码,工程实时协同配图,来自官网)

工作流的融合与重塑

瀑布流模型是古老的软件开发流程之一,相比混沌状态,它最大改进是要求开发者先思考,然后才是编码,需求和设计先于编码,相信这也是大多数技术公司采用的流程,一环扣一环严格分工,但这只在特定类型的软件开发上是有效的,涉及用户界面的应用或软件上并不合适。

首先,我们不知道产品在推出前能否最终取得成功,也就是说产品的最终形态不会是一开始就确定下来,需求是会变的;其次,在瀑布流模型中,用户只出现在需求分析和验收测试两个阶段,这意味着中间环节出问题,会等到瀑布流走完整个链条才被发现;最后,需求变动会影响链条上的所有人,过程资产可能无法复用。这是传统的瀑布流模型与快速变化的现实世界的冲突,难道我们不想改变这低效的现状吗?

实时协同的理想状态是多角色协同,假如产品经理,设计师,开发者都能参与进来,那么项目开发的整个生命周期,是从串行改并行的,中间过程资产可以复用,比如开发者无需对着高精度原型或者UI稿重新用代码实现一遍;降低上下游沟通成本,比如用户界面的变动,若只涉及视觉部分,那么设计师直接调整即可,无需重新出稿以及代码调整;前期需求还不是很明确的时候,开发者无需提前抽象封装业务组件,仅实现当下固定的部分,以及支撑当前需求的部分,减少无效编码。

iofod 提出了应用开发的新范式,无论是直接改线上文件的作坊式暴力美学,还是追求高效精简工作流的中小团队,或者是注重稳定性的大教堂流水线,都能无缝衔接融合。

结语

随着科学发展,第一类和第二类永动机相继被判死刑,人类收敛自己生物链顶端的傲慢,紧接着又从各个角度打破幻想:数学的哥德尔不完备定理,量子力学的测不准原理,机器学习的没有免费的午餐定理,区块链的FLP不可能原理…人类花费大量的努力去破除因果迷信,认识客观规律,为前进的方向定界,但即便当下我们的思维依然囿于大情节的迷恋,对不可能的事物一厢情愿。软件开发同其他社会生产活动一样,本质上属于耗散结构,唯有不断重构优化才能保持不腐败,从写下第一行代码开始,它的复杂度就天然存在了,无Bug只是临时的,所以我们努力的方向不该是要求人不会犯错。

iofod 编辑器开发完成后,公司所有网站和应用都是通过它来构建,我们再也回不到从前,如果说“自己会用”是对 iofod 最基本的要求,那么“少部分人离不开它”则是我们接下来的目标。iofod 作为一个低代码平台的意义之一,就是将相似的生产成本转移到工具内部,工具内部去处理这部分成本,再结合全新的开发范式,让应用开发生产力达到一个新的水准。

都看到这了,不来试试?

相关链接:

iofod 官网
Github 开源
轮播案例
weui案例
声明式UI
User Centered Design
iofod 跨平台生成
SpringOne Platform 2017
Rxjs

iofod - 为攻城师们打造的低代码平台相关推荐

  1. 揭秘“爆款级”产品!看葡萄城活字格低代码平台是如何诞生的

    根据海比研究院发布的<2021年中国低代码/无代码市场研究报告>分析显示,低代码市场成熟度高,正处于成长期初段.中国低代码使用人员规模达42.6万人,另外预计有164万人在使用自有或开源的 ...

  2. 小小攻城师,步步达成梦想!

    2013年11月11日,一个值得纪念的日子,在这个只属于中国的"传统"节日里,不一样的人有不一样的纪念方式,而这一天,正是小小攻城师在51CTO的破壳日... 似乎现在才发博文有点 ...

  3. 耳目一新!令人膜拜的牛人简历!厉害的攻城师啊

    广外美女余博雅经典简历发出以后被疯狂转发而走红网络,几天后顺利找到工作.微博里不断出现各式各样的微简历:地址一.地址二.地址三.地址四.地址五.地址六...... 而如今简历的形式更是十分的精彩,这里 ...

  4. 如何成为一名优秀的web前端工程师(前端攻城师)

    程序设计之道无远弗届,御晨风而返.---- 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种: 第一种一直在问:如何学习前端? 第二种总说:前端很简单,就那么一点东西. 我从没有听到有人问:如何做一名优 ...

  5. 作为一个J2EE软件攻城师

    作为一个J2EE软件攻城师,解决问题解到这个份上,也是被逼的 作为一个J2EE软件攻城师,以下我说的内容和J2EE没有一点关系 作为一个J2EE软件攻城师,以下我提到一些做法.想法,都是来自于直觉,原 ...

  6. 新浪php程序员转行卖水果,IT攻城师转行卖水果 屌丝瞬间变为型男引围观

    "程序员的华丽转型"惊呆网友 "2011年,他是一个PHP攻城师(网络用语,意为工程师),和弟兄们奋战到午夜为了新浪微群2.0上线:2013年,他离开IT业,华丽转身成一 ...

  7. 耳目一新!让人膜拜的碉堡个人简历!厉害的攻城师

    广外美女余博雅经典简历发出以后被疯狂转发而走红网络,几天后顺利找到工作.微博里不断出现各式各样的微简历:地址一.地址二.地址三.地址四.地址五.地址六...... 而如今简历的形式更是十分的精彩,这里 ...

  8. 低代码平台如何打造个性化督办管理系统

    编者按:本文介绍了督办管理系统的概念,以粤运集团案例为引,分析了个性化督办管理系统和传统督办管理系统的区别,并进一步指出低代码平台在实现个性化督办管理系统方面的优势以及如何实践. 概要: (1)督办管 ...

  9. 打造智慧工地,低代码平台助力基建行业全链路数字化升级

    编者按:基建行业数字化转型需求迫切,低代码平台有助于加快数字化转型速度,赋能建筑工程企业升级.本文分析了低代码在基建行业中的应用价值,并指出基建行业对于低代码平台的需求,最后通过相关案例的展示了低代码 ...

最新文章

  1. TensorFlow全球下载量破1亿,Jeff Dean激动不已,但网友却不给面子
  2. WebSocket在容器化管理平台的应用
  3. rust(65)-rust常用指针
  4. 预览速度提升30倍,这是什么黑科技?(天猫618之3D渲染篇)
  5. 下次遇到嚣张的候选人就先这么问:系统变慢了你怎么搞?
  6. [渝粤教育] 中国地质大学 C语言程序设计(新) 复习题
  7. linux 驱动没有设备id,linux不同总线的设备和驱动的匹配过程分析
  8. Docker垃圾清理方案
  9. apache php debug,fedora linux apache/php下安装配置xdebug
  10. BZOJ2957 楼房重建
  11. ASP.NET生成静态页面的简单实现
  12. Oracle的方案(Schema)和用户(User)的区别
  13. STM32F207SPI、I2C实验记录
  14. 修改网站背景图html代码,HTML中更换或添加网站背景图片的代码怎么写?(示例)...
  15. 编程实现恩格玛加密机(C++)
  16. 计算机的专业课听不懂怎么办,为什么大学计算机课难以听懂?
  17. 解决IDEA的Plugin org.apache.maven.plugins:maven-archetype-plugin:RELEASE or one of its dependencies cou
  18. chromium aura简介
  19. 安装完linux后要做的几件事。
  20. python 调用函数实现——斐波纳契数列

热门文章

  1. 有效icon设计的三个属性
  2. 新零售微服务解决方案,打通企业微信、饿了么、美团、京东到家
  3. 用ps制作一张复仇者联盟海报
  4. Java 生鲜电商平台 - API 接口设计之 token、timestamp、sign 具体架构与实现
  5. 程序员哪有朝九晚六的?朝九晚六只是形式
  6. 鼠标点击控制div层展开收缩
  7. 为ubuntu装好搜狗拼音法
  8. MosMedData: 新冠肺炎胸部 CT扫描数据集上基于3D-CNN实现二分类
  9. vue使用云信实时通信(聊天室)
  10. 戴尔服务器开启虚拟机,Windows 服务器2019中的受防护虚拟机增强功能