【AI赋能前端研发】整洁的业务组件架构

文摘   科技   2024-04-29 07:51   中国香港  

大家好,我是LV。

「AI赋能前端研发」 是一系列的篇章,持续更新,总结了笔者在前端研发领域的AI赋能的全流程。

上一篇章,笔者针对AI赋能前端研发,进行了全流程的分析,建议还没看过的同学先看上一章,详见:《AI赋能前端研发:落地全流程分析

上次提到,AI赋能的重点会围绕:从 0 ~ 1 开发业务组件这个步骤。

这个步骤的内容有点多,为了让内容更具有结构性,便于读者理解,也将会拆成一些个小节来说。

本篇咱们讨论:「如何写出干净整洁的业务组件,以及AI赋能业务组件生成的早期探索经验。」

建议收藏关注防失联,不多说,开始。

Clean Components

Clean Code —— 干净的代码。

不同的公司可能存在不同的 codding 规范,但是万变不离其宗。

简而言之:编写容易理解、修改、可维护的代码。

笔者在公司提出了 「clean component」 ,目前已经在前端项目中落地,同时老项目的技术重构也也在推行新的 clean component 规范。

何为 clean component?

其中最重要的一个原则就是:「服务端状态和前端状态」 分离。

服务端状态和前端状态

先来看一段代码,这种类型的代码大部分的前端同学可能都不陌生。

  • 使用mobx或者redux来管理所有的数据状态,包括服务端状态(请求api拿到的数据状态)和前端状态(组件的loading、visible等)。

  • 在任意组件中请求api、对接联调数据,然后再将这些状态通过 inject 等方式注入到任意层级的组件中。

「存在的问题:」

1、前后端状态数据混合在一起,随着项目的扩大,状态将会越来越多,同时这些状态会在各种组件中被赋值及消费,导致数据的维护越来越复杂。

2、在任意的业务组件中请求接口,对接服务端数据,功能职责耦合严重,导致业务组件强依赖于服务端的接口数据、接口的任何变更会直接影响到大范围的业务组件。

「优化后的方案:」

规范前端页面开发的工作流:业务组件开发 -> 数据对接联调。

其中包含一个最基本的原则:「服务端状态和前端状态分离」

  • 所有业务组件均可独立运行

  • 业务组件中不能直接请求api数据,需要触发接口请求的地方通过props回调给到外部对接层。

「这样做的好处:」

  • 功能职责单一,整体的数据流向十分清晰:对接层请求数据给到业务组件层,业务组件通过props回调触发对接层的数据变更。

  • 技术迭代维护很简单,以我公司的一个场景举例:

由于后端将所有的 restful api 迁移到了 graphql,因此前端也需要配合修改所有的api对接。

如果是在以前:由于「服务端状态数据和前端状态数据混合在了一起」 ,同时在很多「业务组件中都直接对接了api」,因此我们需要找到每一个直接对接了 api 组件,然后逐个替换为 graphql,还得要「保证服务端数据的变化不会影响到耦合在一起的前端状态数据」

现在:由于「服务端状态数据和前端状态数据分隔开来了」 ,所以我们不需要关心业务组件,只需要在对接层将 restful api 换成 graphql 即可。

那么,基于这个原则,如何从 0 ~ 1 开发一个整洁的业务组件呢?

业务组件从 0 ~ 1 的开发步骤

「1、明确业务组件的代码规范」

千人千面,不同的公司有不同的代码规范,甚至同一个公司的不同项目可能也有不同的规范。

但是要想一个项目具有长期的可维护性,代码规范至关重要。

如下为我司业务组件的规范示例:

  • 代码结构
StorybookExample // 业务组件名称
├─ index.ts // 仅仅将组件内容暴露给外部
├─ interface.ts // 定义组件内部用到的所有类型,包括 interface、type、enum等
├─ StorybookExample.stories.tsx // 组件的storybook文档,包含组件的使用示例
├─ StorybookExample.tsx // 组件的主体逻辑,如果组件太大可以拆分为其它的文件
├─ styles.ts // 组件所有的样式资源存放在此,使用styled-components来编写
├─ helpers.ts // 如果存在一些工具函数,那放在此处
├─ StorybookExample.test.tsx // 存放业务组件的单元测试
  • 通过 storybook 管理所有业务组件。

好处:1、基于storybook运行环境,能快速进行业务组件的开发;2、便于业务组件的统一管理维护,基于 storybook 示例文档,新人可以快速熟悉业务组件;

「2、拆分业务组件」

基于整个设计稿页面,按照模块的 「独立性」「可复用性」 来拆分业务组件。

「3、定义 业务组件的 props」

业务组件的props决定了这个组件的功能,这也是正式开发代码前的第一步。

如何设计呢:「一进一出」

一进:组件的运行和渲染依赖什么样的外部数据

一出:组件能够给外部提供什么数据

「4、根据定义好的props和代码规范编写代码」

在开发业务组件的步骤中,这一步开发人员花的时间最多,同样也是我们AI赋能的重点。

AI如何赋能

根据以上业务组件的开发流程,笔者早在去年中旬的时候,就探索了AI如何生成前端业务组件,详见:《【在公司前端项目中落地 ChatGPT】初探成果》《【在公司前端项目中落地 ChatGPT】聊天式编程》

总结起来4步走:

「1、定义角色」

「2、投喂基础UI组件数据」

「3、描述业务组件的基本信息,开始生成代码」

「4、迭代优化」

ps:如上提示词原文件如有需要,可以链接笔者获取。

当然,上面是笔者在AI赋能前端早些时候的探索经历,现在已经有了更多新的洞察和落地方案。

不过这也我是探索AI赋能前端从 0 ~ 1 路上的历程,希望给大家一些帮助~

后续我们继续讨论如下内容:

基于基础组件库打造AI小助手、「循序渐进式」业务组件代码生成、「一劳永逸式」业务组件代码生成

欢迎链接笔者,AI赋能,共勉。


LV技术派
探索AI时代下适合前端的转型(超级个体)之路|著有《AI赋能前端研发从 0 ~ 1》开源电子书:https://ai.iamlv.cn