从公共业务提取来看架构演进——功能设置篇

1.引言

上一篇文章我们以帐号权限的提取为例,介绍了当架构跟不上业务发展时及时调整架构的一种思路。这篇文章我们以功能设置为例,进一步讨论公共业务提取这个话题。

功能设置在本文中是指产品开放给企业和用户的一些功能设置项,以视频会议产品为例示意如下:

上面示意的只是一小部分,实际场景中长期需求迭代下来的设置项很多,并且不同产品中的设置项也有所不同,但形式基本一致。

就功能设置的理解达成一致后,接下来我们进入正文,讨论下这块业务在产品多元化的过程中出现的一些问题。

2. 问题

最开始,当只有一个产品时,功能设置可能是这样:

  • 产品有自己的管理中心,负责管理产品下的相关设置项;
  • 具体的设置项存放在产品自己的系统中;
  • 客户端访问产品系统来操作功能设置项;

这时候挺清晰的,并没有什么明显的问题。

随着产品多元化的发展,企业又上线了一些其它产品系统,系统模型演变如下:

  • 每个产品维护一个功能设置模块,并存储自己产品范围内的设置数据;
  • 每个产品开发一套管理中心,来管理自己产品范围内的功能设置项;
  • 客户端访问用户的设置项,需要跨越多个产品系统,才能拼凑出一份完整的数据;
    <抽取前的业务架构模型>

各个产品分别做自己的功能设置,这样带来的问题是:

  • 各产品研发团队在功能设置上做的工作是相似又重复的;
  • 不同产品间功能设置数据隔裂,访问和修改数据都平添了多次网络IO,同时也给维护带来了很多不便;
  • 数据分散在各个产品中,管理中心也只能跟着做多套,给管理中心的统一带来障碍;

那如何解决呢?

3. 优化思路

我们从功能设置的业务模型、管理中心、产品研发思路几个角度来谈谈如何演进。

3.1 业务模型演进

同前文一样,我们一样可以用公共业务提取的思路来优化局部架构,思路描述如下 :

  • 所有产品的设置数据都提取到一个服务,暂且称为统一权限配置服务
  • 设置项的增删改查维护工作只做一遍,不再区分产品;
  • 客户端直接访问统一权限配置服务,一次IO就能访问和操作用户所有设置数据;
    在这里插入图片描述

逻辑和数据统一后,能方便业务需求的后续扩展,例如:

  • 企业级设置和用户级设置需要做的合并工作;
  • 产品要强制开关某些功能的需求;
  • 设置项要受帐号权限控制的需求;
  • 功能试用要联动设置项的需求;
  • ……

这些需求是不区分产品的,都可以分别抽象成一套逻辑或配置,并且各个产品包括客户端其实都不用关心,这样基本就解决了功能设置的数据隔裂和重复开发问题。

3.2 管理中心演进

之前帐号权限和功能配置都割裂在不同的产品系统中,所以管理中心只能对接不同的产品系统来实现管理,也间接导致每个产品都做了一套自己的管理中心。

当我们把功能设置和前文中的帐号权限提取并统一后,可以做进一步的思考:多个产品的管理中心有没有可能合并成一套?

可以分析下管理中心的业务范围,大概就是:

  • 管理用户帐号;
  • 管理功能配置;
  • 管理各种业务功能数据,像会议、直播、会议室、白名单之类的;
  • 管理各种使用统计数据,像会议统计、观众参会统计之类;

这些业务有跨产品通用的,也有各个产品中独有的,并且每个产品多多少少有一些自己的特性。如果要合并就要从设计层面下一些功夫,比如能按模块和功能特性为各个产品作配置。

如果能按模块来设计,那管理中心基本就是把各个业务的数据管理组合到一起,类似下图所示:
<管理中心系统模型图>

管理员进入时可能要允许选择产品,并在不同产品形态下呈现不同的业务模块,例如:

  • 云会议管理中心,可能呈现的是会议、会议室、会议统计;
  • 云直播管理中心,可能呈现的是直播、白名单、观众统计;
  • 各个产品都有的是帐号权限和产品功能设置,但不同产品呈现的配置项可能有所不同;

而这些功能模块的差异,就要区分产品做不同的可见范围配置来实现,也就是上图中比较基础的模块权限配置

管理中心的统一,主要工作在于前端和产品交互层面的统一,这里只是讨论了一种思路,仅供参考。

3.3 产品开发模式演进

最近在回顾公司做过的产品,有IM类的,有任务类的,有文档类的,有视频类的,有呼叫类的等等,总结下来失败的居多,成功的则偏少。所以这里想讨论的问题是:公司投入大量资源和时间来研发一款产品,如果这款产品没有成功,那么公司能从这款产品的研发过程中获得什么?

这是最近一直在思考的问题,做产品不应该是孤注一掷,一旦失败,就团队解散,产品下线,投入打水漂。不论产品成败,企业都应该要从产品的研发过程中获得一些东西,比如:

  1. 相关业务领域的技术研究和文档积累;
  2. 独立可复用的业务模块和组件;
  3. 这个产品研发过程中,走错了哪些方向,做错了哪些事情,能获得什么教训;

可能第一点大家都会做,第三点偏经验类,那第二点呢?

上面讨论的管理中心演进方向,应该是能带来一些启发和思考的,就是产品不应该是一座座孤岛,而应该是业务的组合体,就像下面图示一样。
<功能组合快速迭代一个产品的模型图>

如果我们把每个产品的开发都当做独立的业务模块来做,那不论产品结局如何,我们都能沉淀出一些可以复用的功能模块和业务组件。这样在下一次产品的开发时,就有可能通过复用或扩展来大大降低二次投入的成本,甚至基于积累的业务组件快速组合出一个新的产品。

小结

本文通过对功能设置的业务提取,讨论了一种局部架构的系统演进思路。与前文的帐号权限篇有相似之处(例如功能重复的提取),也有不同之处(如数据割裂问题的讨论),算是同类话题的深入和补充,并进一步讨论了多个产品的管理中心从项目上统一的可能性。

在本文最后,介绍了一种产研效能提升思路。一款产品的成功和失败我们是无法预言的,但能不能从一款产品的研发过程中有所沉淀和收获,以及能取得多大的收获,却是我们能做的,而且这里说的沉淀与收获基本与产品成败没有关系。

既然产品允许失败,并且失败的可能性还不小,那我们要思考的就不仅仅是怎么把产品做出来,而是如果产品失败我们能从中沉淀出哪些可复用的东西,以便下一个产品能在之前的基础上快速搭起来。

所以失败并不要紧,要紧的是能不能快速爬起来。

延伸阅读

  • 从帐号权限提取来看架构如何演进:https://blog.csdn.net/xiaojia1001/article/details/134147088
  • 一个功能试用模块的抽取案例:https://blog.csdn.net/xiaojia1001/article/details/132959395

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/125026.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式是测试模式咩?

设计模式和测试模式概述 软件的生命周期为什么要进行测试&#xff08;测试的目的&#xff09;&#xff1f;软件的设计模式1. **瀑布模型**3. 增量和迭代模型4. 敏捷模型5. 喷泉模型 测试模型V模型W模型 一个应用程序从出生到“死亡”会经过非常漫长的流程…… 软件的生命周期 …

剑指JUC原理-15.ThreadLocal

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

XSS 跨站点脚本漏洞详解

文章目录 漏洞概述XSS漏洞原理xss漏洞危害xss漏洞验证XSS漏洞分类反射型存储型DOM型 固定会话攻击原理简单xss注入复现 XSS 攻防xss构造方法利用标签符号<>事件响应javascript伪协议其他标签 XSS 变形方式xss防御黑白名单策略输入过滤 案例XSS 盲打 漏洞概述 ​ 跨站点脚…

rancher或者其他容器平台使用非root用户启动jar

场景&#xff1a; java程序打成镜像&#xff0c;在rancher上运行&#xff0c;默认是root账户&#xff0c;发现hdfs或者hive不允许root账户操作&#xff1b;所以打算用费root账户启动jar&#xff0c;使其具有hive和hdfs的操作权限。 Dockerfile entrypoint.sh 思路就是上面这样…

【第2章 Node.js基础】2.3 Node.js事件机制

2.3 Node.js事件机制 学习目标 &#xff08;1&#xff09;理解Node.js的事件机制&#xff1b; &#xff08;2&#xff09;掌握事件的监听与触发的用法。 文章目录 2.3 Node.js事件机制什么是事件机制为什么要有事件机制事件循环事件的监听与触发EventEmitter类常用API 什么是…

面包屑实现

背景&#xff1a;面包屑根据菜单内容显示不同内容。首页永远存在&#xff0c;后面的活动管理及多级菜单的面包屑展示。 实现原理&#xff1a; 通过this.$route.matched获取所有匹配路由&#xff0c;将处理首页外的其他路由设置到一个数组中&#xff0c;再通过数组循环方式显示…

Qt国际化

刚开始听到这个名字我还觉得很高大上&#xff0c;最后发现这不就是系统语言选择吗&#xff0c;适应不同国家的人 先在widget.cpp写个要翻译的东西&#xff0c;我这里想做英语翻译成汉语、日语、泰语三种 #include "widget.h"Widget::Widget(QWidget *parent): QWidg…

0基础学习VR全景平台篇第119篇:利用蒙版航拍补天 - PS教程

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 嗨&#xff0c;大家好。欢迎收看蛙色VR系列教程之PS利用蒙版航拍补天。 我们之前已经教过大家如何进行航拍调色&#xff0c;不知道大家学的怎么样呢&#xff1f; 会不会发现&…

壁炉艺术:美与温暖的交汇点

在我们的家中&#xff0c;有一种东西&#xff0c;既能提供温暖&#xff0c;又能为室内增添活力。壁炉不仅是取暖的好帮手&#xff0c;还能成为室内设计的亮点。 壁炉最初是为了取暖而生的&#xff0c;但如今&#xff0c;它们已经变成了室内设计的一部分。现代壁炉不再仅仅是灶…

【Qt之QAssociativeIterable】使用

介绍 QAssociativeIterable类是QVariant中一个关联式容器的可迭代接口。这个类允许多种访问在QVariant中保存的关联式容器元素的方法。如果一个QVariant可以转换为QVariantHash或QVariantMap&#xff0c;那么QAssociativeIterable的实例可以从中提取出来。 QHash<int, QSt…

centos的docker镜像下载ffmpeg的方式

ffmpeg是业界比较好用的开源的音频处理工具&#xff0c;当我们在实际业务中使用ffmpeg的时候&#xff0c;直接使用yum安装回提示找不到ffmpeg的包&#xff0c;遇到这种情况&#xff0c;可以通过以下方式来进行安装&#xff08;docker环境&#xff09;。 已经拥有镜像 更新源 …

【自动化测试】基于Selenium + Python的web自动化框架

一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化工具&#xff0c;她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid&#xff1a;  1、Selenium IDE&…

电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备?

电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备? 电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备? 这里以win10系统为例进行说明: 如下图所示,打开右下角的“网络和Internet设置”, 如下图所示,点击进入“更改适配器选项”, 如下图所示…

软件测试入门之接口测试

首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把数据库共享给你&#xff0c;他只能给你…

【技术类-01】doc转PDF程序卡死的解决方案,

摘要&#xff1a; 1、报错&#xff1a; raise AttributeError("%s.%s" % (self._username_, attr))&#xff09; 2、表现&#xff1a;doc转PDF卡死&#xff08;白条不动或出现以上英文&#xff09; 3、解决&#xff1a;在docx保存代码行后面加上time.sleep(3) 4、…

vue+java实现语音转文字思路

思路&#xff1a; 前端录音生成wav文件后端去解析 技术&#xff1a; 后端&#xff1a; Vosk是一个离线开源语音识别工具。它可以识别16种语言&#xff0c;包括中文。 API接口&#xff0c;让您可以只用几行代码&#xff0c;即可迅速免费调用、体验功能。 目前支持 WAV声音文件…

Django(一、简介,安装与使用)

文章目录 一、Django引入1.web应用程序什么是web&#xff1f;web引用程序的优点web应用程序的缺点什么是web框架 2.纯手写web框架1.web框架的本质2.HTTP协议的特性&#xff1a;3.编写基于wsgire模块搭建web框架代码封装优化代码封装 二、Django框架的学习1.Python中的主流框架2…

基于Kinect 动捕XR直播解决方案 - 硬件篇

Kinect-V2 硬件设备 一、Kinect介绍 1、Kinect for Windows 的开发配置 Kinect V2 操作系统&#xff1a;Windows 10&#xff08;必须&#xff09; Windows Surface Windows Surface 2 开发环境&#xff1a;Visual Studio 2017 .NET Framework 4.5 (.NET Framework 4.5) 硬…

vue实现商品列表,组件抽离

1.需求说明 my-tag 标签组件封装 ​ (1) 双击显示输入框&#xff0c;输入框获取焦点 ​ (2) 失去焦点&#xff0c;隐藏输入框 ​ (3) 回显标签信息 ​ (4) 内容修改&#xff0c;回车 → 修改标签信息 my-table 表格组件封装 ​ (1) 动态传递表格数据渲染 ​ (2) 表头支…

竞赛 深度学习疲劳检测 驾驶行为检测 - python opencv cnn

文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习加…