超级灵感:前端页面功能统一管理方案
前端页面功能统一管理方案
引言
我和朋友聊天想到一个灵感,关于支付状态机管理,这个类可以让我们知道具体上一个状态和下一个状态,这是由于那个事件触发改变,这个功能设计非常好!
从而讨论出为什么我们不能把某一个页面的功能,所有使用的controller或者定时器统一管理呢?
这样后端程序员甚至不用和前端程序员对接,噢噢噢!!!!!!甚至后面来的新人也不需要前端每次去寻找那个页面上具体是那个接口,我只需要看那个管理类就可以了!!!
要说缺点,就是防御性编程没有了,这尼玛又给公司做贡献了,让下一个人能更好替换你,想想我都想笑~~~~~~~~~~~·~~
呵呵哈哈哈哈哈哈哈哈哈~~~~
不过,这个设计理念还是把它分享出来,供大家参考学习。
你说这个设计理念到底时好时坏呢?
欢迎评论,我想知道大家对这个看法,在评论区谈谈你的想法呗。
设计理念
在复杂的企业级应用中,一个页面往往包含多个功能,如查询、详情、导出、导入、新增、编辑等。传统的开发方式会导致这些功能分散在不同的Controller甚至不同的微服务中,增加了代码维护的难度。
我们提出一种页面功能管理器的设计,通过一个统一的管理类来描述和组织页面的所有功能,让代码更加清晰、可读和可维护。

核心设计
功能枚举定义
public enum PageFunction {// 列表查询LIST_QUERY("列表查询"),// 详情查询DETAIL_QUERY("详情查询"),// 导出EXPORT("导出"),// 导入IMPORT("导入"),// 新增CREATE("新增"),// 编辑UPDATE("编辑"),// 停用DISABLE("停用"),// 启用ENABLE("启用"),// 删除DELETE("删除");private final String description;PageFunction(String description) {this.description = description;}
}
功能映射定义
@Data
@Builder
public class PageFunctionMapping {// 功能类型private PageFunction function;// 所属微服务private String microservice;// 控制器类private Class<?> controllerClass;// 方法名private String methodName;// 请求路径private String requestPath;// 请求方法类型private RequestMethod requestMethod;// 功能描述private String description;
}
页面功能管理器
@Component
@Slf4j
public class PageFunctionManager {// 页面唯一标识private final String pageId;// 功能映射集合private final Map<PageFunction, PageFunctionMapping> functionMappings;public PageFunctionManager(String pageId) {this.pageId = pageId;this.functionMappings = new EnumMap<>(PageFunction.class);}/*** 注册页面功能*/public PageFunctionManager registerFunction(PageFunction function, PageFunctionMapping mapping) {functionMappings.put(function, mapping);return this;}/*** 获取功能映射*/public Optional<PageFunctionMapping> getFunctionMapping(PageFunction function) {return Optional.ofNullable(functionMappings.get(function));}/*** 生成功能文档*/public String generateFunctionDocumentation() {StringBuilder doc = new StringBuilder();doc.append("页面功能文档 - ").append(pageId).append("\n\n");functionMappings.forEach((function, mapping) -> {doc.append(String.format("功能: %s (%s)\n", function.name(), function.description));doc.append(String.format("微服务: %s\n", mapping.getMicroservice()));doc.append(String.format("控制器: %s\n", mapping.getControllerClass().getSimpleName()));doc.append(String.format("方法: %s\n", mapping.getMethodName()));doc.append(String.format("请求路径: %s\n", mapping.getRequestPath()));doc.append(String.format("请求方法: %s\n\n", mapping.getRequestMethod()));});return doc.toString();}/*** 打印功能映射*/public void printFunctionMappings() {log.info(generateFunctionDocumentation());}
}
使用示例
@Configuration
public class UserManagementPageConfig {@Beanpublic PageFunctionManager userManagementPageFunctionManager() {return new PageFunctionManager("用户管理页面").registerFunction(PageFunction.LIST_QUERY, PageFunctionMapping.builder().function(PageFunction.LIST_QUERY).microservice("user-service").controllerClass(UserController.class).methodName("listUsers").requestPath("/api/users").requestMethod(RequestMethod.GET).description("分页查询用户列表").build()).registerFunction(PageFunction.CREATE, PageFunctionMapping.builder().function(PageFunction.CREATE).microservice("user-service").controllerClass(UserController.class).methodName("createUser").requestPath("/api/users").requestMethod(RequestMethod.POST).description("创建新用户").build())// 可以继续添加其他功能;}
}
文档生成与使用
@RestController
@RequestMapping("/page-docs")
public class PageDocumentationController {@Autowiredprivate PageFunctionManager userManagementPageFunctionManager;@GetMapping("/user-management")public String getUserManagementPageDoc() {return userManagementPageFunctionManager.generateFunctionDocumentation();}
}
设计优势
- 集中管理:所有页面功能在一个类中统一管理
- 可读性强:新人可以快速理解页面功能
- 文档自动生成:可以自动生成功能文档
- 灵活扩展:易于添加新的功能
- 微服务兼容:支持跨微服务的功能管理
应用场景
- 复杂的企业级管理系统
- 需要统一功能管理的前端页面
- 技术交接和文档维护
扩展建议
- 集成Swagger文档
- 添加权限管理
- 支持国际化描述
结语
这种设计不仅仅是一种代码组织方式,更是一种让代码更具可读性和可维护性的思路。通过将页面功能集中管理,我们可以更清晰地理解系统的结构和功能。
相关文章:
超级灵感:前端页面功能统一管理方案
前端页面功能统一管理方案 引言 我和朋友聊天想到一个灵感,关于支付状态机管理,这个类可以让我们知道具体上一个状态和下一个状态,这是由于那个事件触发改变,这个功能设计非常好! 从而讨论出为什么我们不能把某一个…...
力扣第 77 题 组合
题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按任意顺序返回答案。 示例 示例 1 输入: n 4, k 2输出: [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]示例 2 输入: n 1, k …...
(超详细图文)PLSQL Developer 配置连接远程 Oracle 服务
1、下载配置文件 (超详细图文详情)Navicat 配置连接 Oracle-CSDN博客 将下载的文件解压到单独文件夹,如:D:\App\App_Java\Oracle\instantclient-basic-windows.x64-19.25.0.0.0dbru 2、配置 打开 PLSQL Developer,登…...
元器件选型与参数13 电源的分类-线性电源参数 RT9013 AMS1117 PCB布局布线
目录 一、线性电源 1、重要参数 2、线性电源效率一定低吗 3、线性电源并联扩流 4、常见电路 RT9013-LDO AMS1117-xx-LDO 5、布局布线 6、外置输入与电池供电 7、单片机控制其他模组供电实现低功耗 二、开关电源与线性电源配合 1、高效率与低噪声 DC-DC电源大致分为…...
RHEL7+Oracle11.2 RAC集群-多路径(multipath+udev)安装步骤
RHEL7Oracle11.2RAC集群-多路径(multipathudev)安装 配置虚拟存储 使用StarWind Management Console软件,配置存储 dggrid1: 1g*3 Dggrid2: 1g*3 Dgsystem: 5g*1 系统表空间,临时表空间,UNDO,参数文件…...
每日速记10道java面试题03
其他资料 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 目录 一、你使用过java的反射机制吗?如何应用反射? 二、什么是泛型?泛型的作用是什么? 三、java的泛型擦除是什么? 四、Java 中…...
Vue 3 的双向绑定原理
Vue 3 的双向绑定原理是基于 响应式系统 和 数据劫持 技术来实现的。在 Vue 3 中,双向绑定通常是通过 v-model 指令来完成的,它本质上是数据的双向同步:当数据改变时,视图自动更新,反之,视图的修改也会更新…...
如何使用 Chrome 无痕浏览模式访问网站?
无痕浏览(Incognito Mode)是 Google Chrome 浏览器提供的一种隐私保护功能,它允许用户在一个独立的会话中浏览网页,而不会记录用户的浏览历史、下载历史、表单数据等。这对于希望保护个人隐私或进行临时性匿名浏览的用户来说非常有…...
Idea 2024.3 突然出现点击run 运行没有反应,且没有任何提示。
写这篇文章的目的是为了提供一个新的解决思路,因为存在同病不同原因。 如果你进行了1. 检查运行配置 (Run Configuration) 2. 清理和重建项目 3. 清除缓存并重启 IDEA 4.排除kotlin 5.重装idea等等操作之后仍然没有解决,可以试着按一下步骤进行解决。 检…...
【小白学机器学习36】关于独立概率,联合概率,交叉概率,交叉概率和,总概率等 概念辨析的例子
目录 1 先说结论 2 联合概率 3 边缘概率 4 (行/列)边缘概率的和 总概率1 5 条件概率 5.1 条件概率的除法公式 5.2 条件概率和联合概率区别 1 先说结论 关于独立概率,联合概率,交叉概率,交叉概率和,总概率 类型含义 …...
Spring Boot 项目——分层架构
在创建一个 Spring Boot 项目时,为了提高代码的可维护性、可扩展性和清晰度,通常会按照一定的分层架构进行设计。常见的分层架构包括以下几层: 1. Controller 层(Web 层) 作用:接收用户请求,并…...
wordpress网站首页底部栏显示网站备案信息
一、页脚文件footer.php 例如,wordpress主题使用的是simple-life主题,服务器IP为192.168.68.89,在wordpress主题文件中有个页脚文件footer.php,这是一个包含网站页脚代码的文件。 footer.php 路径如下: /www/wwwroot/192.168.68…...
python面向对象编程练习
学生成绩管理系统 定义一个Student类,包括属性(姓名、成绩)和方法(设置成绩、获取成绩、计算平均成绩)。 实例化多个学生对象并调用方法。 功能说明: Student 类: init(self, name):…...
OpenCV_Code_LOG
孔洞填充 void fillHole(const Mat srcBw, Mat &dstBw) {Size m_Size srcBw.size();Mat TempMat::zeros(m_Size.height2,m_Size.width2,srcBw.type());//延展图像srcBw.copyTo(Temp(Range(1, m_Size.height 1), Range(1, m_Size.width 1)));cv::floodFill(Temp, Point(…...
力扣第 74 题是 搜索二维矩阵
题目描述 给定一个 m x n 的矩阵 matrix 和一个目标值 target,请你编写一个函数来判断目标值 target 是否在矩阵中。 每行的元素按升序排列。每列的元素按升序排列。 示例 1 输入: matrix [[1, 4, 7, 11],[2, 5, 8, 12],[3, 6, 9, 16],[10, 13, 14…...
[极客大挑战 2019]BabySQL--详细解析
信息搜集 进入界面: 输入用户名为admin,密码随便输一个: 发现是GET传参,有username和password两个传参点。 我们测试一下password点位能不能注入: 单引号闭合报错,根据报错信息,我们可以判断…...
实现Linux平台自定义协议族
一 简介 我们常常在Linux系统中编写socket接收TCP/UDP协议数据,大家有没有想过它怎么实现的,如果我们要实现socket接收自定义的协议数据又该怎么做呢?带着这个疑问,我们一起往下看吧~~ 二 Linux内核函数简介 在Linux系统中要想…...
RL78/G15 Fast Prototyping Board Arduino IDE 平台开发过程
这是一篇基于RL78/G15 Fast Prototyping Board的Arduino IDE开发记录 RL78/G15 Fast Prototyping Board硬件简介(背景)基础测试(方法说明/操作说明)开发环境搭建(方法说明/操作说明代码结果)Arduino IDE RL…...
YOLOv11 NCNN安卓部署
YOLOv11 NCNN安卓部署 前言 yolov11 NCNN安卓部署 目前的帧率可以稳定在20帧左右,下面是这个项目的github地址:https://github.com/gaoxumustwin/ncnn-android-yolov11 上面的检测精度很低时因为这个模型只训练了5个epoch,使用3090训练一个…...
对载入的3dtiles进行旋转、平移和缩放变换。
使用 params: {tx: 129.75845, //模型中心X轴坐标(经度,单位:十进制度)//小左ty: 46.6839, //模型中心Y轴坐标(纬度,单位:十进制度)//小下tz: 28, //模型中心Z轴坐标(高…...
3个关键场景解析:如何使用iperf3 Windows版精准诊断网络性能问题
3个关键场景解析:如何使用iperf3 Windows版精准诊断网络性能问题 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 在当今数字化时代&…...
AI建站工具推荐:能建站只是开始,实测“全链路变现”才是关键
AI建站工具推荐:能建站只是开始,实测“全链路变现”才是关键 【引言:95%的建站工具都搞错了一件事】 最近我们拆解了市面上17款AI建站工具,发现一个扎心的数据: 超过80%的外贸网站,在上线3个月后依然没有…...
flux_down 下载工具使用步骤详解(附FluxDown多线程下载与磁力解析教程)
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
从零搭建Modbus通信测试环境:TCP与串口双模式实战
1. 为什么需要搭建Modbus测试环境? 刚接触工业通信协议时,我最头疼的就是找不到合适的设备做测试。真实PLC动辄上万元,而Modbus作为工业领域最常用的通信协议之一,其实完全可以用软件模拟。搭建本地测试环境的好处很明显ÿ…...
谷歌排名算法有哪些? 解决AI生成内容不收录的3个操作方案
2024年3月5日,谷歌启动了一场持续45天的核心算法更新。这次调整导致互联网上超过40%的低质量内容被清除。许多依靠软件大批量产出文章的站点,网页收录量在短时间内缩减了九成。单纯依靠算法堆砌出来的文字,在目前的搜索环境下很难获得生存空间…...
Speechless:三步完成微博备份PDF导出的Chrome扩展终极指南
Speechless:三步完成微博备份PDF导出的Chrome扩展终极指南 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 你是否曾担心自己珍贵的微博内…...
高效解决Visual C++运行库问题的终极方案实战指南
高效解决Visual C运行库问题的终极方案实战指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C运行库缺失或版本冲突是Windows开发者最常见的系统环境问…...
如何快速解决Visual C++运行库安装问题:终极一站式解决方案指南
如何快速解决Visual C运行库安装问题:终极一站式解决方案指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过应用程序无法启动&…...
Tetgen网格剖分结果怎么看?.node/.ele/.face文件详解与在ParaView中的可视化
Tetgen网格剖分结果解析与ParaView可视化实战指南 当你第一次运行Tetgen并看到那些.node、.ele和.face文件时,可能会感到困惑——这些看似简单的文本文件如何转化为直观的三维网格?本文将带你深入理解这些文件的内部结构,掌握网格质量评估的关…...
5分钟极速上手:用BepInEx打造你的专属游戏世界
5分钟极速上手:用BepInEx打造你的专属游戏世界 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 想象一下,你刚入手了一款心仪已久的游戏,但总觉得…...
