当前位置: 首页 > Web前端 > HTML

Sunmao:一个真正可扩展的低代码UI框架

时间:2023-03-29 13:01:19 HTML

Sunmao:一个真正可扩展的低代码UI框架大家回来。最常见的问题是低代码不灵活和供应商锁定。显然,这样的担忧是有道理的,因为大家不想在实现某个特定功能时发现低代码平台无法支持,也不想在从低代码平台迁移时发现应用需要完全重写。某厂商代码平台。现有的一些产品很明智地将低代码的使用场景限制在特定的领域,比如内部工具或者官网,因为在这些场景中,用户更关心的是开发效率,而不是灵活性和定制能力。但是当我们希望在更多的场景下使用低代码来提升效率时,这样的产品就不能满足需求了。因此,我们开始开发孙猫项目。基于开源开发,我们专注于这个低代码UI框架的可扩展性。设计原理孙茂以中国的十榫命名,这是一种自古沿用的木结构技术,以精巧、稳固着称。我们非常喜欢这个名字,因为榫卯结构非常类似于我们将各种建筑单元组合成一个稳定的应用程序的方式。在开发过程中,我们始终遵循以下设计原则,以确保我们的抽象方法正确一致。1.明确不同角色的职责在开发孙猫的过程中,我们首先将用户分为两种角色:组件开发者和应用构建者。角色的划分是我们后续设计中最重要的概念。组件开发人员应该更加关注代码质量、性能和用户体验,并以此为标准来创建可重用的组件。组件开发者在按照自己的方式开发新的组件时,可以将该组件打包为三猫组件,注册到组件库中。应用程序构建器选择现有组件并实施与应用程序相关的业务逻辑。将组件与三猫的平台特性相结合,应用程序构建者可以更有效地做到这一点。角色划分的原因是应用程序一直在开发,但组件的迭代频率要低得多。因此,在孙猫的帮助下,用户可以将组件开发的任务交给少数高级前端工程师,而将应用构建的工作交给初级前端工程师、后端工程师,甚至没有代码开发经验的人。2、利用代码的力量,不做限制之前说过,孙猫并不限制用户只能使用按钮、输入框等基础组件来开发应用,而是允许组件开发者注册各种复杂的、特定领域的组件覆盖应用需求,延续现有的视觉设计体系。在开发孙猫的过程中,我们也投入了大量的精力来保证我们的实现不会给用户的应用带来限制。例如,许多低代码工具的可视化编辑器在将鼠标悬停在组件上时会提供突出显示效果。不少编辑器通过在每个组件外包裹一个

元素,监听事件,修改元素的高亮样式来实现这个功能。但是这种实现有很多缺点,比如增加DOM节点的数量,防止组件被配置为内联,添加隐式嵌套关系,这些都是孙茂无法接受的。虽然我们花了更多时间来找到避免上述所有陷阱的实现,但我们相信这是值得的。因为只有这样才能发挥代码的力量,赢得开发者的认可。3.多层次的可扩展性孙茂包含核心规范、运行时和编辑器三个层次。组件和应用程序模式在核心规范中定义。除了常规字段,用户还可以通过添加注解的方式注入额外的信息,并在运行时或编辑器中使用。我们多次提到的组件也是可扩展的。组件开发人员可以为组件定义各种参数并与其他组件进行交互。下面,我们将介绍另一种组件间共享扩展能力的方式:traits。在可视化编辑器中,用户还可以在编辑器中配置各个组件参数的显示和输入方式。4.专注而不是发散我们没有选择开发全栈低代码方案,而是专注于UI部分,目前只有WebUI。因为我们相信当今的后端技术日新月异,一个UI低代码的方案可以更灵活的接入各种后端服务,从而给用户带来最大的灵活性。孙猫WebUI开发的工作原理已经相当成熟,所以孙猫在此基础上只增加了少量低代码场景下的必要能力,即:响应式事件和方法槽以及样式槽类型trait可视化编辑器响应最新的。状态响应性是指当应用程序状态发生变化时,所有依赖于该状态的UI都会自动重写渲染。Sunmao实现了一个高性能的响应式状态中心,所有组件都可以同步它们的状态并访问其他组件的状态。比如我们想让demo按钮渲染demo输入框的值,只需要填写{{input.value.length}}:按钮可以响应输入的变化实时渲染盒子!组件间的交互现代UI框架往往强调状态驱动和声明式的概念,但在低代码场景下过度追求这两点可能会适得其反。例如,当你想实现点击主题按钮切换到深色主题的功能时,最直观的方式就是为按钮提供onClick事件,触发主题组件的changeTheme方法。在三猫中,可以在组件的规范中声明对外发送的事件和一组可以对外调用的命令式方法。在此基础上,任何组件都可以通过事件与方法和其他组件进行交互。下面是一个监听事件和执行方法的例子:LayoutandStyles当我们开发应用程序时,我们通常最终会将组件组合成一个嵌套结构,比如浏览器中的DOM树。在三茂的应用架构中,我们使用平面数组结构来记录所有的组件信息,使得修改和存储更加高效。因此,我们引入槽的概念来表示嵌套结构。可以通过将一个组件放置在另一个组件的插槽中来实现和声明一个组件具有哪些插槽:另一个给想象空间留下很大空间的特性是自定义组件的样式。如果组件开发者能够暴露定义组件样式的能力,那么组件的复用性将会大大提高。同样,我们引入样式槽的概念来实现自定义样式的功能。您可以通过以下方式实现和声明一个组件有哪些样式槽:在样式槽中自定义样式:类型安全在低代码场景下,类型安全可以大大提升开发体验和应用构建速度。所以在商猫我们大量使用typescript和JSONschema来实现一个优秀的类型系统。如果组件开发者使用typescript进行开发,孙茂可以从组件的JSONschema定义中推断出typescript类型,从而帮助组件开发者编写出类型安全的代码。我们的类型系统还在构建应用程序的过程中提供了自动完成和验证等功能。在组件之间重用代码许多组件需要通用的功能,例如数据获取和事件节流。我们上面多次提到的traits就是针对这个需求而设计的。试想一下,如果每个组件都实现dataUrl(获取数据的URL)、hidden(可见)、handlers(事件回调)等属性,显然是非常多余的。对于这样的需求,trait系统提供了很好的抽象,帮助开发者以trait的形式实现通用的能力,并在多个组件中复用,保证组件实现的简单性。可扩展的可视化编辑器孙猫的可视化编辑器读取所有组件的规范,并根据它们定义的JSON模式自动生成表单。如果需要自定义部分表单,组件开发人员可以实现自定义编辑器小部件。扩展可视化编辑器的设计可以在这个设计文档中进一步阅读。保持开放Sunmao从第一天起就以开源方式开发。但是,当我们说“开放”时,我们不仅仅局限于在Apache-2.0许可下提供所有源代码。虽然Sunmao是一个从SmartX内部发起的项目,但我们在开发过程中选择将所有提案、讨论和设计决策放在公共Github存储库中,而不是其他内部渠道。因为我们相信“保持开放”是孙茂发展的基石,我们也将能使用孙茂构建自己的低代码解决方案视为开发者最大的荣幸。如果您对sunamo-ui感兴趣,欢迎访问我们的Github存储库或加入我们的slack频道以与社区保持联系。