我不想等后端出接口字段了!!
背景(问题)
前端开发和后端开发是同时进行的项目,但是后端接口出来后,还要跟后端开发去博弈一下,谁改?改多少?从而让前后端数据接口字段结构能接通使用。
解决思路
在没有后端接口的情况下,前端可以自由定义字段进行业务开发。当后端接口完成后,使用适配器将后端数据结构和字段适配修改为前端需要的结构和字段,而不改变前端页面任何代码的情况下进行接口对接。
INFO
从自定义字段到后端数据对接的适配器设计,思想上,类似于设计模式中的适配器模式
开发流程
- 前端业务开发(无后端接口)
- 前端使用 Vue 进行业务开发,可以自由定义字段和数据结构。
- 为了规范数据的处理和展示,前端需要定义好所需的 TypeScript 类型、注释,用于声明数据的结构和字段。
- 接口对接函数开发
- 这部分,将通过 api2ts 这个vscode扩展,对 java 文档进行解析,生成对应请求函数和 TS 类型,以及初始
- 适配器设计与实现
- 编写一个适配器,将后端提供的数据结构和字段适配修改为前端需要的结构和字段。
- 适配器可以在前端请求后端数据时进行数据转换,使得前端页面可以直接使用后端数据进行展示,而无需修改任何前端代码。
代码示例
适配器设计原理
- 适配器通过监听前端的数据请求,在数据返回前对数据进行转换。
- 将后端数据结构和字段映射到前端需要的结构和字段,保证前端页面能够正常展示数据。
结论
通过适配器的设计,前端可以在没有后端接口的情况下进行业务开发,并在后端接口完成后进行数据对接,而无需修改任何前端页面代码,极大地提高了开发效率和灵活性。且在后续过程,可以更容易的将组件构建为可复用的业务组件,降低重构难度。
2024-9-11 的新理解
有一个叫展示器(presenter)的概念,这其实是采用谦卑对象模式的一种形式。
展示器
之前提到的适配器,功能更严格的来说,就可以借鉴这个展示器的概念:
“展示器则是可测试的对象。展示器的工作是负责从应用程序中接收数据,然后按视图的需要将这些数据格式化,以便视图将其呈现在屏幕上。例如,如果应用程序需要在屏幕上展示一个日期,那么它传递给展示器的应该是一个 Date 对象。然后展示器会将该对象格式化成所需的字符串形式,并将其填充到视图模型中。
如果应用程序需要在屏幕上展示金额,那么它应该将 Currency 对象传递给展示器。展示器随后会将这个对象按所需的小数位数进行格式化,并加上对应的货币标识符,形成一个字符串存放在视图模型中。如果需要将负数金额显示成红色,那么该视图模型中就应该有一个简单的布尔值被恰当地设置。"
-- 《架构整洁之道》
这里的展示器就类似于我构思的适配器,就是为了数据格式化,当然也有所不同:
- 适配器:为了让后端数据格式 转换成前端所需数据格式
- 展示器:为了让前端展示的数据转换成可以直接渲染出来的内容
以目前主流的前端框架 vue react 来说,其实可以先设置一个适配器去适配字段,再设置一个展示器来对数据进行格式化,最后将数据赋值到视图模型(响应式数据对象)中。
前端的交互,若会影响视图的变化,可以让其去调用展示器,展示器才去负责控制视图模型(响应式对象)