LowCode + 团队组件设计规范 = 灵光一闪 ?

简介: LowCode + 团队组件设计规范 = 灵光一闪 ?

故事从何而起


注意:本文为寒草🌿的自我尝试,部分思想还是很稚嫩。大佬勿喷,不妨多多指教,一起交流~


大家好,我是小寒草🌿呀!


为什么是小寒草呢⚡️,因为我最近发现自己很渺小,真就是寄蜉蝣于天地,渺沧海之一粟。哀吾生之须臾,羡长江之无穷...


打住,我也不往远了扯,直接说事情的起源。在去年的年中,我的上一任荣誉小组长为我分享了他的组件拆分与设计经验,我也从他的身上学到了很多☀️


前几天在和一个实习生同学一起开发项目,我就借鉴了前荣誉小组长的经验,做了比较充分的前期设计工作。但是其实在开发完成后的 review 的过程中还是发现会存在一定程度的差异。


最开始我的组件设计把组件分成了四类:


网络异常,图片无法展示
|


这里的划分方案单纯的从我的经验出发,略显稚嫩。


  • page 组件:一般不复用,即页面对应的组件,我眼里它相当于主板把各个组件和样式组合为一整个页面
  • Layout 组件:纯样式复用,不包含业务
  • 业务基础组件:参考 element-ui 等基础组件库,此类组件一般叫做 xxx-form,xxx-table,暴露的 api 也会基本与基础组件一致
  • 基础业务组件:常见的业务基本都是由增删改查组成的,此类的组件也是对这一粒度业务的封装。此类组件一般叫做:xxx-creator,xxx-deleter,xxx-updater,xxx-viewer


之后我本次的例子也是来自于业务基础组件:


component TicketForm [
工单信息表单
ticket-form
--props--
disabled { Boolean }
disabledFields { Array<String> }
--events--
--methods--
getData() => TicketData;
setData(ticketData: TicketData) => Undefined;
clearData() => Undefined;
validate() => Promise.<Boolean>;
clearValidate() => Undefined;
--slots--
]


网络异常,图片无法展示
|


正如大家所见,我明确规定了一个业务基础组件 ticket-form 提供的 api 及所需的 props


props:


  • disabled
  • disabledFileds


methods:


  • getData
  • setData
  • clearData
  • validate
  • clearValidate


之后就进入了开发阶段,但是在我进行 code review 的时候发现了 api 实现不完整的情况。起初我的强迫症犯了,但是后来我想了又想不等单纯的通过 review 去约束,这样成本极高,而且一致的组件其实并不具备很高的 review 价值。


我就去思考解决这个问题的办法,之后经过我大概五分钟的思考,就有了后面的故事。


故事又将如何延续


网络异常,图片无法展示
|


由于我的强迫症,我迫切的想要去解决这个问题,而这个问题其实被我定义为:


提供自动化方案,解决通用组件实现不一致的问题


首先,需要确定我们现阶段有什么:


  • 公司内部基础组件库(各位参考 elementui)
  • 系统内已实现的业务组件
  • 我和前任小组长敲定下的组件设计规范(且不论这个规范是否优秀)


于是我画了这样一张图


网络异常,图片无法展示
|


下面我来对这个图进行一些解读:

  1. 首先我们通过团队的开发经验输出了一定的规范或者约束
  2. 之后,基于基础组件库或者业务组件库我们会产出一定的最佳实践或者 demo 案例
  3. 在之后经过一定阶段的博弈,大家对规范形成了一定的共识
  4. 对于我和前任小组长,我们形成了基础业务组件和业务基础组件的分类并将其 API 统一化
  5. 最终,基础组件足够统一话后我们就可以采用 low code 的方式进行输出


没错,最后我的想法就是用 low code 解决。大家可能会质疑这个代码怎么可能如此一致,但是就像上一章中 form 的案例,其实按照这种约束,代码还是及其统一的。

之后我花了一个小时,简单的做了一个生成 xxx-form 组件的 demo,其中生成代码的方法如下:


export const getFormCode = (schema) => {
  return `<template>
  <q-form
    ref="form"
    :model="formData"
    :rules="rules"
    :disabled="disabled"
  >
    ${
      schema.map(item => `
      <q-form-item label="${item.label}" prop="${item.key}" ${item.isInline?'class="inline-form-item"':''}>
        <q-input v-model="formData.${item.key}" :placeholder="请输入${item.label}" :disabled="disabledFields.includes('${item.key}')" />
      </q-form-item>
      `).join('\n')
    }
  </q-form>                                   
  </template>
  <script>
  const getBaseCustomFormData = () => ({
    ${
      schema.map(item => `
        ${item.key}: ''
      `).join(',\n')
    }
  })
  export default {
  props: {
    disabled: {
      type: Boolean,
      default: false
    },
    // Array.<String>
    disabledFields: {
      type: Array,
      default: () => []
    }
  },
  data() {
    return {
      formData: getBaseCustomFormData(),
      rules: {
        ${
          schema.filter(item => item.required).map(item => `
            ${item.key}: [
              { required: true, message: '请输入${item.label}', trigger: 'blur' }
            ]
          `).join(',\n')
        }
      },
    };
  },
  methods: {
    setData(data) {
      this.formData = Object.assign(getBaseCustomFormData(), data);
    },
    getData() {
      return Object.assign({}, this.formData);
    },
    clearData() {
      this.formData = getBaseCustomFormData();
    },
    validate() {
      return this.$refs.form.validate();
    },
    clearValidate () {
      this.$refs.form.clearValidate();
    },
  }
  };
  </script>
  <style lang="scss" scoped>
  .inline-form-item {
    display: inline-block;
    width: 50%;
    vertical-align: top;
  }
  </style>
  `
}


效果也比较简单,支持我们常用的布局配置:


网络异常,图片无法展示
|


最后生成的代码也一定是符合我对于 xxx-form 组件的规范的。


之后我拿着这个 demo 和我的前任小组长聊天,之后又在下班路上和大领导聊了聊组件设计和团队规范。


于是就有了最后一章的总结 ✨


最后一章留给总结


网络异常,图片无法展示
|


这只是一个简单的 demo,主要是和大家分享我在开发中的灵感一现,但是现在来看其实是有问题的:


  • 关于组件分类与设计的合理性
  • 关于这个代码生成程序的局限性
  • ...


其实如果想做一个东西,应该有更多的准备,站在一个更大的视野去挖掘价值。本文思想比较稚嫩,也请多多指教。

相关文章
|
8月前
|
人工智能 自然语言处理 安全
2026年阿里云轻量服务器部署OpenClaw(原Clawdbot)零基础喂饭级教程
在AI Agent全民普及的2026年,OpenClaw(原Clawdbot,曾用名Moltbot)凭借开源免费、功能强大、插件丰富的核心优势,成为零基础用户与中小企业搭建专属AI助手的首选工具。它并非传统的聊天机器人,而是一款具备“思考+执行”能力的AI自动化代理框架,可通过自然语言指令完成办公自动化、网页抓取、代码开发、内容创作等各类任务,搭配ClawHub技能市场的5700+款模块化技能,能轻松适配个人办公、团队协作、业务提效等全场景需求。
949 9
|
缓存 JavaScript 前端开发
《代码沙盒深度实战:iframe安全隔离与实时双向通信的架构设计与落地策略》
本文聚焦代码沙盒网站(类似CodePen)的核心技术难点,深度拆解前端领域的iframe安全隔离与实时双向通信实现方案。首先讲解基于“最小权限原则”的iframe沙箱配置与环境净化,结合CSP形成双重安全防护;再详解postMessage API的标准化协议设计、身份验证与消息可靠性保障,解决隔离环境下的通信难题。还涵盖代码有序执行、增量更新、Web Worker优化,以及错误捕获、恶意行为监测等稳定性策略,同时从资源加载、通信链路、iframe池机制做性能优化,并结合编辑、反馈、扩展体验设计落地。为前端开发者提供从架构到实践的完整沙盒开发指南,助力平衡安全与用户体验。
614 27
|
9月前
|
编解码 分布式计算 安全
阿里云高配置云服务器租用价格:8核16G、4核32G、8核32G、8核64G九代实例活动价格参考
阿里云服务器8核16G、4核32G、8核32G、8核64G配置活动价格参考,企业级c9i实例8核16G月付702.28元/1个月起;g9i实例8核32G月付891.97元/1个月起;r9i实例4核32G月付604.46元/1个月起。c9i支持AMX矩阵加速,适合AI推理;g9i均衡配比适配Web应用;r9i大内存满足Hadoop集群需求。
1244 9
|
9月前
|
人工智能 监控 安全
智能体来了(西南总部)AI智能体运营工程师如何成为2026年的职业天花板?
2025-2026年,AI智能体落地加速,催生高价值新职业——AI智能体运营工程师。他们融合大模型技术与业务场景,具备Agent设计、工具集成、记忆管理与系统优化能力,推动企业从“单点智能”迈向“流程自动化”。作为大模型下半场的核心角色,其复合型技能与战略价值正构筑新一代“职业天花板”。
1017 2
|
10月前
|
运维 Ubuntu Unix
Linux网络打印故障排除(手把手教你解决常见问题)
教程来源https://www.vps5.cn/本教程详解Linux系统下网络打印的配置与故障排除,涵盖CUPS服务安装、Web界面添加打印机、常见问题解决方法,助你轻松实现Ubuntu等系统下的稳定打印。
|
10月前
|
JSON 自然语言处理 算法
DSL语法、搜索结果处理
本文深入讲解Elasticsearch的搜索功能,涵盖DSL查询语法,包括全文检索、精确查询、地理坐标查询及复合查询。通过实例演示match、term、range、geo_distance及bool、function_score等查询的使用,助力高效实现数据检索与排序优化。
|
10月前
|
传感器 人工智能 监控
如何开发一套实用的智慧工地系统?
智慧工地系统开发需融合物联网、AI、BIM等技术,涵盖人员、设备、安全、环境等模块。通过需求分析、硬件部署、软件开发与系统集成,实现施工全过程智能化管理,提升效率、保障安全、降低成本,推动建筑行业数字化转型。(238字)
535 0
|
12月前
|
人工智能 生物认证 数据安全/隐私保护
AI检测器:我们如何识别机器生成的内容?
AI检测器:我们如何识别机器生成的内容?
800 3
|
运维 Kubernetes 安全
Helm安装脚本:Kubernetes包管理工具的快速部署
这个过程提供一种快速、简单且自动化地方式去设置并开始使用Heml管理Kubernetes集群中资源。这个过程不涉及复杂操作,并且适合各种规模环境从小型测试环境到大型生产环境都适合采取此方法进行Heml工具链初始化操作。
443 5
|
存储 持续交付 Docker
Docker:颠覆传统开发的轻量级容器革命
Docker:颠覆传统开发的轻量级容器革命

热门文章

最新文章