在先前的一系列《云研发:研发即代码》文章里,我们介绍了软件工程的代码化闭环。同时,在《Water:云研发架构模式》介绍了设计这样的开发环境里,我们所需要的一些模式。今天呢,作为这一系列的落地实践,我们将介绍云研发 IDE的设计思想,以及如何实现,当然还有一点儿早期代码:https://github.com/inherd/uncode。

第一次声明:这是一个概念性 IDE 的设计,暂不适合任何生产环境。

在开始真正阅读之前呢,为了能更好地让大家理解,我们要回顾一下软件工程行业:

  • DevOps 理念在国内的软件行业有了长足的发展,在包括传统企业(银行、制造业)在内的公司里已经广泛接受,并进行了大规模推广。

  • 云原生技术已经成为市场的主流趋势。云迁移与遗留系统上云是市场的一大热门话题。

  • 中台方法论在实践上还缺少真正的成功案例。

  • 低代码/无代码平台逐渐成为新的建设目标。

  • 云开发有了越来越多的中小规模应用案例。

  • AI 代码生成正在被小范围验证。

从整个行业而言,人们的关注点一直是如何提升技术生产力? 现在技术到了一个新的阶段了,而需求的转换大大限制了人们的开发速度。于是无论我们的 DevOps 和云开发实施得再好,也会陷入需求与技术隔离的瓶颈。这就是为什么我们需要云研发 理论体系 :),通过代码化的方式,一站式解决需求到设计,再到代码的问题。

对于云研发理论来说,我已经设计好了理论基础、软件架构、开发模式,并且对其中的一系列东西进行了验证,如:文档代码化、需求代码化、代码的代码化 等。

我们需要一个容器,把这些内容、模式、代码整合到一起,这就是 Uncode,一个概念性的云研发 IDE。

Uncode,一个云研发 IDE

Uncode 是一个面向云研发时代设计的下一代概念性 IDE。特性:

  • 流程化为领域语言。Process as code

  • 一切皆 DSL。万物代码化

  • 开发环境即流程

简单来说,你可以在这个 IDE 上完成:需求的编写,转换需求为设计,设计关联代码,禅模式编程,开发完即可上线。

与之相对比的是,传统的一站式 DevOps 门户,尽管你可以通过跳转来完成,但是无法相互关联和设计。与之相近的是 GitOps,即将应用系统的声明性基础架构和应用程序存放在 Git 版本库中。但是它们都不闭环,也不完整。

云研发 IDE 模式:流程即领域语言

回到软件开发上,我们的软件开发需求始于一个大特性或者史诗故事,这些故事会转换为一个 feature,如 Cucumber 中的:

# author: Phodal HUANG
# status: doing
# language: zh-CN
功能: 第一个用户故事
场景打开 Uncode
假如我在 Terminal 工具里
当输入 uncode
那么则能在 Uncode IDE 里打开当前项目

需求设计人员在这一步之前,将需求转换为了故事,故事与特性之间的关系记录在这个 feature 中。开发人员从 IDE 中看到需求,标记了对应的状态 status,就可以进入代码的设计阶段。

在设计这个阶段,我们先设计了 design 的三种类型: flow、 model、 ui,对应于流设计、模型设计和 UI 设计。而我们要在 Uncode 中实现的部分便是需求与模型、流和 UI 的绑定。围绕模型,我们还得构造统一的领域语言,用于自动化关联接口与设计。从模式上来说,这个和无代码/低代码的开发是相似的。

唯一不同的是描述方式。使用领域特定语言来描述内容,我们才能对系统进行合理地重构。

云研发 IDE 模式:一切皆文件

Linux/Unix下的哲学核心思想是『一切皆文件』。

在现今的开发环境之下,我们在看板上挑选卡片,又或者是通过低代码编辑器生成,使用的存储介质都是数据库。而数据库这些东西并不存在于开发环境中,而是放置于远程服务器上。这就造成了另外一个痛点,无法简单反向关联、需求与代码隔离等等。

于是,作为云研发 IDE 的第二个模式,将所有的内容使用文件保存,并且使用版本管理工具(如 Git)进行管理。如我们的需求以类似于代码的形势存储在数据库中,可以实现以下特性:

  • “不可伪造”

  • “全程留痕”

  • “可以追溯”

  • “公开透明”

  • “集体维护”

没错,这就是一个区块链系统。一旦需求发生了变化 ,你可以即刻感知到。不过,一旦你的代码与模型不相符合,你的代码就无法提交,或者模型被自动修改 :(。

云研发 IDE 模式:开发环境即流程

作为一个集成开发环境,现有的 一站式 DevOps 软件研发管理协作平台 都应该只被当作管理和展示用途。而从设计本身来说,一个 Dashboard 和一个开源工具,本身就分工。

我们在代码库上有了需求,那么我们可以借助于 IDE:

  1. 将需求以看板的形式在本地重新可视化出来。

  2. 将设计领域的语言在本地可视化出来,并将之与代码进行关联。

  3. 高亮需要所有修改的代码块。如 Controller、View 等。

  4. 将模型的修改反向关联到设计上,以实时追踪设计的正确性。

我们还可以做一些不那么正确的事情 ,如锁定开发人员的修改范围。

云研发 IDE 模式:填空式/选择式编程

对于软件架构师来说,人们经常有这么一些痛点:

  • 面对的是缺乏经验的开发者,难以快速地推进系统的开发。

  • 开发者缺乏对系统的了解,在错误的地方修改错误的代码。

因此,回到 TypeFlow 的观点上,我们既然已经设计好了模型,设计好了输入和输出,那么我们一定能生成中间的方法及其返回值,并为其设计一个 mock 的对象。如:

@RequestMapping("/")
String home() {
return "Hello, World!"
}

这种模式对于业务应用开发来说,非常易于实现 —— 生成绑定过程中的各类函数等等。

选择式编程。而一旦我们在组织内的所有代码都被索引之外,我们有能力通过识别输入和输出,以及对应的方法名,就能在 IDE 中推荐对应的方法让你选择。

云研发 IDE 基础要素

就这么一看,我们只需要搞好 IDE 的事情即可。然而, 并非如此,我们还要做的事情还有一些:

  1. 开发即部署。即 local dev 便是 dev server,可直接接入现有的系统。

  2. 万物即 DSL。具备一定等级的程序语言设计能力。

  3. API 的 API。即将现有的内部、外部 API 进行抽象化设计,以提供快速可用的 API。

开发即部署 —— 云开发环境

从开发层面来看,我们一直在往复地浪费本地环境和线上开发环境,与此同时还有对应的测试运行时间、构建时间等。我们需要一个于云开发环境的机制。

加速联调、测试过程。当我们的本地环境上云之后,一旦需要与其它系统对接时,所有的开发、测试效率将大大提升。譬如说,我们的接口需要多提供一个参数,传统模式之后,我们要在本地运行,再通过流水线构建和部署。而现在,不再需要这个过程了,只需要配置好 Gateway,轻轻松松进行开发。

加速环境搭建。我们不再需要在本地配置开发环境,只需要 1-click 就可以在本地 IDE 里直接调试。

市面上已经有一个勉强配合的概念:Nocalhost

抽象的抽象:DSL

对于需求、设计、开发、测试等的抽象,一直是我在去年研究的重点,它包含了:

  • 需求的抽象

  • 设计化为抽象

    • 架构描述语言

    • 统一建模语言

  • 版本管理抽象

  • 构建工具抽象

即将这一系列的步骤转换为领域特定语言 —— 只有将流程、工具、行为进行抽象,我们才得以优化整个系统。

胶水设计:API 的 API

软件开发是一项复杂的团队活动。在一个系统里,我们要与大量的内、外部系统进行关联。而为了简化开发人员的负担,我们需要提供一个新的 API 来将现有的 API 进行封装。

如在现有的模式之下,为了记录一个日志,我们需要在依赖管理工具中引入对应的依赖,再添加相当的代码。而所有的 API 都是在更新的,这一系列应该将由 IDE 本身来完成。在这种模式之下,我们只需要输入对应的 snippets,便能完成这一系列的自动化过程操作。

技术细节

最后,我们还是回到代码上:https://github.com/inherd/uncode/

架构设计

我决定使用我设计的新架构设计套路来展示一上 Uncode IDE 的架构。由于不确定性较大,现有的系统是一种介于单体与微架构 + 模块化的方式设计的,我想了想后来就称之为流体模式。一种在持续演进的过程中,不断进行不可预料地拆分架构单元的模式。

在驱动方式上,由四种模式构成:

  • 模块化。

  • 管理和过滤器。主要进行领域特定语言的设计

  • 搭档模式(sidecar)。将诸如语言解析等独立为进程,通过进程调用来实现跨平台

  • 容器桥。将 UI 展示与逻辑相隔离,让 IDE 的大部分组件与 UI 无关。

同时系统的物理设计上,打算采用领域驱动的方式进行。

框架选型

考虑到这是底层开发 + 系统编程,我们:

  1. 使用 Rust 来作为主要开发语言

  2. 在 UI 展示上,暂时使用 Tauri(WebView 容器) + React 来展示需求(本地看板)与设计(建模等)。

  3. 使用 TypeScript 作为 UI 部分开发语言

  4. 使用 RPC 作为与多个 DSL 的通信协议

  5. ……

依旧地,这个项目将继续在 Inherd 小组上开发~~。

FAQ 及其它

代码:https://github.com/inherd/uncode/

vs Intellij IDEA or VSCode / Theia

并非完全竞争关系,编码这部分的功能,还是这两货比较流行。Uncode 不会在前期造这方面的轮子,只是显式地集成它们,或者被集成。

Uncode 优先解决 DevOps 的本地化,将其融入开发的开发过程的问题。

其它

最后一次声明:这是一个概念性 IDE 的设计,暂不适合任何生产环境。 欢迎加入云研发的微信研讨群。

流程即代码:云研发、低代码 IDE —— Uncode相关推荐

  1. 透析阿里云视频云「低代码音视频工厂」之能量引擎——vPaaS视频原生应用开发平台

    简介:支撑15分钟上线高品质专属音视频平台 为满足企业用户极速搭建高品质专属音视频业务的需求,阿里云视频云的"低代码音视频工厂"应运而生,但极速而高品质的平台搭建诉求,需要用全新的 ...

  2. 2022钉钉发布会|云钉低代码新模式、新能力、新机遇

    简介:宜搭重磅发布酷应用工厂.连接器.AI+FaaS扩展等新功能! 3月22日,以"科技向实,万物生长"为主题的2022钉钉发布会在杭州举行. 阿里巴巴资深技术专家,钉钉宜搭创始人 ...

  3. 什么是低代码-甲骨文对低代码的定义

    什么是低代码平台? 低代码阶段使用简化的界面,允许开发人员构建应用程序和软件 既用户友好又响应迅速.而不是编写几行复杂的代码和语言结构, 您可以快速轻松地利用低代码来构建具有用户界面的整体应用程序, ...

  4. 飞速创软 | “ 无代码 ” 并不是 “ 低代码 ” 的进阶版

    在同客户和业界人士探讨 " 更高效率的软件开发方式 " 时,发现大多数人并不清楚 " 低代码 "和 " 无代码 " 之间的区别. 低代码和无 ...

  5. 微软第四朵智能云:低代码平台Power Platform

    作者 | 中国软件网 曹开彬 校对 | 中国软件网 海策 回望2020年,新冠疫情的爆发,不仅让远程办公.视频会议.直播等数字化应用迅速得到普及应用,也让低代码.无代码开发平台迎来了特别关注.由于疫情 ...

  6. 企业ERP管理系统-国内自主研发低代码开发平台

    编者按:企业ERP管理系统,ERP是一种主要面向制造行业进行物质资源.资金资源和信息资源集成一体化管理的企业信息管理系统.ERP是一个以管理会计为核心可以提供跨地区.跨部门.甚至跨公司整合实时信息的企 ...

  7. 云原生/低代码/数据科学/计算等方向内容整理志愿者招募了!

    持续招募内容整理志愿者!云原生.数据科学.AI.低代码.计算等方向,有意愿的小伙伴,欢迎识别二维码提前报名哦.我们将持续为爱学习.有时间的小伙伴,提供多重福利! 要求: 1. 你需要具备一定学术背景, ...

  8. 腾讯云神笔低代码平台的申请没通过,只能等公测了

    很期待的腾讯云低代码平台申请没通过: 审核还是很严格的,发布申请后,客服小姐姐亲自电话过来了解情况: 要求有实际业务场景,我们是企业微信服务提供商,小程序和公众号服务提供商,都没有审核通过,严格吧!! ...

  9. 阿里云视频云推出低代码音视频工厂vPaaS

    大势所趋 众所体感,社会已演进到超视频化时代,视频云技术从内容和交互视角,推动了用户端全方位的体验革新,更驱动了众多行业的音视频数智化转型. 音视频技术积累 阿里云视频云凭借阿里巴巴卓越的技术能力和生 ...

  10. 阿里云AIoT云端一体:迎接云原生+低代码时代的到来

    距上次2019年参加上海阿里云开发者大会已经近2年的时间了,也许因为疫情的原因,这一两年线下大型活动基本很少了,这次在北京国家会议中心举办的阿里云开发者大会,无论是参会人员的规模,还有演讲嘉宾的级别和 ...

最新文章

  1. 矩阵连乘算法代码JAVA_矩阵连乘问题的动态规划算法(java)
  2. Windows程序设计零基础自学_7_进程操作
  3. java中volatile
  4. 基于行为树的新手引导设计
  5. triggered_time
  6. 【机器学习】opencv-摄像头中的人脸采集
  7. 地磅称重软件源码_【漯河衡器】导致地磅称重不准原因及处理措施
  8. mvp内粗泄露问题_如何在一天内从MVP转到生产服务器
  9. 从入门到精通:卷积神经网络初学者指南
  10. SpringCloud学习之Hystrix
  11. MATLAB LSTM多输入多输出 模式分类 示例解析(含代码)
  12. 16年,平凡而又收获的一年,android底层开发实战
  13. ksu7对讲机调频软件_万能对讲机写频软件
  14. 贪婪洞窟2服务器维护,贪婪洞窟211月30日更新维护公告 贪婪洞窟211月30日更新了那些内容...
  15. 【Vegas转】自信从自我欣赏开始
  16. windows执行bat文件闪退情况解决
  17. 一张纸对折13次JAVA_一张纸最多折叠8次?她把纸折叠了13次后,发生了什么?
  18. express 什么是中间件(浅显易懂)
  19. 如何快速修复谷歌浏览器扩展插件频繁损坏问题
  20. 项目一 认识Linux 操作系统

热门文章

  1. DOA算法3:Matrix Pencil
  2. 台式计算机运行慢怎么样能提高速度,如何提高电脑的运行速度,让电脑快起来!...
  3. JTAG IEEE 1194.1笔记
  4. cad怎么画立体图形教学_cad怎么绘制三维图形,cad三维制图实例图文教程
  5. js基础-点击切换div背景颜色
  6. ORA-20011(外部表收集统计信息异常报错)
  7. 接入Paypal 实现跨境支付 - springboot实战电商项目mall4j
  8. linux里php如何执行文件,linux如何执行文件
  9. python从excel中读取数据 写入word_Java调用python脚本,读取excel表格数据并写入word文档-Go语言中文社区...
  10. MySQL - 实战 棋牌游戏数据库开发