前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于数据抽离与数据管理

关于数据抽离与数据管理

原创
作者头像
被删
发布于 2024-07-31 01:50:31
发布于 2024-07-31 01:50:31
3550
举报

托目前主流框架的福,我们能从事件驱动脱离,来到了数据驱动的世界,可以参考以前的《前端思维转变--从事件驱动到数据驱动》。在常常与数据打交道后,我们对组件的封装、配置化的思想一步步地深入和拓展之后,对于数据和状态的管理,也慢慢地出现了一些思考。

应用数据抽离

在把数据与逻辑分离到极致的时候,你再看一个应用,会看到一具静态的逻辑躯壳,以及数据如灵魂般地注入到应用里,使其获得生命。

数据的抽离,其实与配置化的思想有想通的地方,即把可变部分分离,然后通过注入的方式,来实现具体的功能和展示。

状态数据

在一个应用的设计里,我们可能会拥有多个模块,每个模块又各自维护着自己的某些状态,同时部分状态相互影响着,最终呈现出应用的整体状态。

这些状态,都可以通过数据的方式来表示,我们简单称之为状态数据。

怎么定义状态数据?最浅显的办法就是这些数据,可以直接影响模块的状态,如对话框的出现、隐藏,标签的激活、失活,长流程的当前步骤等,都可以作为状态数据。用在 Vue 里面,可能常见如 v-showv-if、以及其他状态判断逻辑。

我们的应用,大多数都是呈现树状结构,一层层地往下分解,直到无法分割的某个简单功能。同时,我们的组件也会呈现出来这样树状的方式,状态是跟随着组件维护,某个功能状态属于组件自己,最外层的状态则属于整个应用,当然这个应用也是组件的一种表示方式。

因此,我们的状态数据,也呈现一种树状的方式,与我们的组件相对应。就像 CSS 与 DOM 节点。

动态数据

我们还有很多的数据,如内容、个人信息等,都是需要我们从数据库拉取回来的。这种需要动态获取然后展示或是影响配置的一些数据,我们称之为动态数据。

动态数据不同于状态数据,并不会跟随着应用的生命周期而改变,也不会随着应用的关闭而消失。它们独立存在于外界,通过注入的方式进入应用,并影响具体的展示和功能逻辑。

和状态数据不一样,动态数据并不一定呈现为树状的形式。它可以是并行的,可以是联动关系,但是随着注入的地方不一样,最终在应用中形成的结构也会不一致。我们可以简单理解为每个动态数据都是平等的。

将数据与应用抽离

要怎么理解将数据与应用抽离呢?形象点形容,就像是我们一个公司,所有的桌子椅子装修和电脑都是静态的,它们相当于一个个的组件,同时每个办公室也可以是一个大点的组件或是模块。

那么在我们这个公司里:

  • 状态数据:椅子的位置、消耗的电量、办公室的照明和空调状态等
  • 动态数据:员工等各种人员流动

当然,公司里没有人员流动的时候,似乎就是个空壳。每天上班的时候,一个个的程序员就涌入公司,给公司注入灵魂,公司得以运作。

要说将数据和应用抽离,作用到这里大概是这个样子?

代码语言:cmd
复制
--------------------------------------------------------
                         公司
---------------------------  ---------------------------
|                         |  |  人           人        |
|                         |  |       人          人    |
|         办公楼          |  |           人            |
|                         |  |    人     人     人  人 |
|                         |  |      人      人   人    |
---------------------------  ---------------------------

在公司正常运作的时候,则是这样的:

代码语言:cmd
复制
--------------------------------------------------------
                         公司
--------------------------------------------------------
|   人     人             人   人       人     人 人    |
|           人            人   人     人          人    |
|        人    人    办公楼   人   人          人       |
|     人    人                人  人     人     人  人  |
|     人     人         人      人     人      人   人  |
--------------------------------------------------------

当然,人不只是站在办公楼里面这么简单,更多的,人会与各种物件进行交互和交流,人与人之间也会相互影响。但是这样简单的管理,很容易造成公司的混乱,所以我们会把人员有规律有组织地分别注入到每个办公室、隔间里面。

这就是我们要做的,不只是如何划分数据、将数据与应用抽离,我们还需要将其有规律地管理。所以,这大概是我们接下来的要讲的内容。

应用数据管理

我们知道哪些数据需要抽离、如何将数据抽离出来,同时,我们还需要知道,这些数据在抽离出来之后,该怎么去进行管理。

数据的流动

数据在注入到我们的应用中后,并不只是简单地存在。它可能会影响应用的状态、同时也会影响其他同样注入的数据。

数据与数据之间的交互,其实在某方面相等于我们组件之间的通信,包括但不限于以下的一些方式:

  • 事件通知
  • 共享对象
  • 单方向流动

事件通知

事件的监听和触发机制,在许多的场景下都能适用,如浏览器点击、输入框的输入操作,则是典型的事件机制。而在很多时候,我们也可以通过事件通知的方式,来进行数据间的交互,如 Websocket 机制。

事件通知机制很方便,可以随意地定义触发的时机,也可以任意地点使用监听或是触发。

但事件机制的弊端也是很明显,就是每一个事件的触发对应一个监听,关系是一一对应。在整个应用中看,则是散落在各处,随意乱窜的数据流动。需要定位的时候,只能通过全局搜索的方式来跟踪数据的去向。

image
image

当然,也有些人会定义一个中转站,所有的事件数据流都会经过那,这样的维护方式会有所改善。

imgae
imgae

类似这种,额,可能会好一些?

共享对象

共享对象是很简答的一种方式,当我们需要多个地方使用相同的数据,我们就把它们放置在一个地方,大家都去那理获取和更新。

image
image

(额请叫我灵魂画家)

通过注入对象的引用,来在不同组件中获取相同的数据源。当然这样的使用方式,需要考虑锁的问题(当然单线程的 JS 里面这样的情况比较少)。

同时,很多时候我们在定义一个对象,有时候想要某些地方共享,有时候又想要获取一个全新独立的对象。这种情况下,我们需要考虑怎样去维护一套这种数据与实例。

单方向流动

给数据的流动一个方向,则可以方便地跟踪数据的来源和去处。通过流的方式管理状态,常见的状态管理工具 Vuex、Redux 等,都是这样的方式去管理。

image
image

当然,赋予数据流方向,但是数据的存放呢,可以通过共享对象的方式,也可以维护一个数据中心,所有的数据变更方式、触发逻辑、影响范围,都在数据中心里面管理和维护。

树状作用域

很多时候,我们的应用通过一层层地封装和隔离,最终会呈现为树状。

我们可以根据组件的树状作用域,结合共享对象的管理,来注入树状的数据结构。典型如 Angular 里,则是通过提供通用的依赖注入方式,配合树状的模块管理,可通过局部注入实例来获取共享或是隔离的数据。

image
image

适度的管理

与组件的封装和配置化相似,数据的抽象、抽离,也是需要适度的。

当我们的应用很小,只有简单的功能的时候,我们甚至不需要对这些状态、数据什么的进行特殊的管理,甚至一个简单的变量就可以搞定了。随着应用组件数量变多,我们开始有了组件的作用域,当组件需要通信,我们可以通过简单的事件机制、或是共享对象的方式来进行交互。

当我们的项目越做越大,要在上百的状态、上万的数据里要按照想要的方式去展示我们的应用,这时候一个状态管理工具则可以轻松解决乱糟糟的数据流问题。

结束语

对数据的抽离和管理,也越来越成为我们在项目架构中需要考虑的部分。应用状态数据的管理,其实里面会有很多的设计模式。或许这块过于抽象,这篇文章也未能表达出最好的想法。但是对于设计模式,我们可以先了解下,在实战的时候,你会不自觉地想起来,啊原来这就是哪个设计模式的使用场景呀~

查看Github有更多内容噢: https://github.com/godbasin

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
页面区块化与应用组件化
很多时候,我们喜欢划分所谓技术需求和业务需求。但其实,技术来自于业务,业务需要技术支撑,两者是分不开的。我们可以尝试在业务里,一样地写出花来。
被删
2024/08/08
5371
页面区块化与应用组件化
数据流管理方案 | Redux 和 MobX 哪个更好?
面试中常问的一道问题就是“你了解哪些数据流管理方案”,面对这样的提问,先搞懂为什么要学数据流管理,再来梳理、对比你所知道的方案。真正的前端开发,不仅仅要面试造火箭,实际工作中依然需要这样的能力。
用户3806669
2021/03/25
2.3K0
数据流管理方案 | Redux 和 MobX 哪个更好?
数据管理之元数据管理
元数据是指来自企业内外的所有物理数据和知识,包括物理数据的格式,技术和业务过程,数据的规则和约束以及企业所使用数据的结构。
肉眼品世界
2021/12/29
8.3K0
数据管理之元数据管理
ArkUI常用数据处理:掌握Map操作与动态数据管理
在HarmonyOS应用开发中,ArkUI框架提供了丰富的数据处理能力,尤其是对于Map这类非线性容器的操作。本文将详细介绍ArkUI中Map的基本概念、操作方法,以及如何在实际开发中应用Map进行数据处理和动态数据管理。
淼学派对
2024/11/04
1350
42. 精读《前端数据流哲学》
本系列分三部曲:《框架实现》 《框架使用》 与 《数据流哲学》,这三篇是我对数据流阶段性的总结,正好补充之前过时的文章。
黄子毅
2022/03/14
1K0
小程序的事件机制与异步执行
在微信小程序的开发过程中,事件机制和异步执行是两个非常重要的概念。小程序的事件机制不仅能够帮助开发者实现与用户交互,还能够高效地处理界面更新和数据流动。而异步执行则是处理网络请求、数据处理、文件上传等操作时的常用方式。本文将详细分析小程序的事件机制与异步执行,提供具体的示例与优化技巧。
LucianaiB
2025/02/21
1400
精读《一种 Hooks 数据流管理方案》
维护项目时,像全局用户信息、全局项目配置、全局功能配置等等,都是跨模块复用的全局数据。
黄子毅
2022/03/15
5760
Vuex
在相对独立的组件中,action -> state -> view的单向数据流能得到保证。而真实业务场景经常需要状态传递及共享,一般方法是:
ayqy贾杰
2019/06/12
1.3K0
React组件设计实践总结05 - 状态管理
今天是 520,这是本系列最后一篇文章,主要涵盖 React 状态管理的相关方案。
_sx_
2019/08/07
2.3K0
React组件设计实践总结05 - 状态管理
86.HarmonyOS NEXT 组件通信与状态共享:构建高效的组件协作机制
通过合理使用组件通信和状态共享机制,可以构建出结构清晰、易于维护的应用。在实际开发中,要根据具体需求选择合适的通信方式,并注意性能优化和代码质量。
全栈若城
2025/03/16
1030
前端架构101:MVC的不足与Flux的崛起
在前几篇中,我演示了一个前端 Backbone.js MVC 框架用于解决实际问题的例子。但 MVC 依然存在几个问题
苏南
2020/12/16
1.5K0
前端架构101:MVC的不足与Flux的崛起
状态管理的概念,都是纸老虎
不管是Vue,还是 React,都需要管理状态(state),比如组件之间都有共享状态的需要。什么是共享状态?比如一个组件需要使用另一个组件的状态,或者一个组件需要改变另一个组件的状态,都是共享状态。
Nealyang
2021/04/20
5.4K0
前端状态管理框架之Redux
随着应用程序单页面需求的越来越复杂,应用状态的管理也变得越来越混乱。应用的状态不仅包括从服务器获取的数据,还包括本地创建的数据,以及反应本地UI状态的数据,而Redux正是为解决这一复杂问题而存在的。
xiangzhihong
2022/11/30
1.2K0
工业互联网可视化系统风格的抉择:线框模式之 3D 数据中心机房的实现
3D 可视化,就是把复杂抽象的数据信息,以合适的视觉元素及视角去呈现,方便系统的展示、维护和管理。而在可视化系统的搭建选择上,所呈现的风格样式效果多种多样,各自所突出的适用场合也不尽相同。对于科技风格上的体现,线框模式可能是最具有代表性意义的实现方式之一。机房数据可视化的管控维护的实现上,在工业互联网的推动下,体现的维护数据和系统搭建也越来越多样化,而 Hightopo(以下简称 HT )的 HT for Web 产品上的有着丰富的组态化可供选择,本文将介绍如何运用 HT 丰富的 2/3D 组态搭建出一个线框楼宇可视化机房的解决方案。
HT for Web
2020/05/26
9540
探索Android复杂页面管理之道-QQ音乐播放页代码演进之路
前言 播放页是QQ音乐内曝光量最大的二级页,是端内展示歌曲信息、提供播控操作、进行推荐宣发的重要入口。随着QQ音乐的快速发展,播放页也从一个简单播控页面逐渐演变到了现在业务众多、UI多变的复杂页面。在该转变的过程中,播放页Android端的代码也根据不同时期的需要,进行了持续演进。本文将简要回顾Android端播放页代码在过去不同时期的结构特点,并重点介绍在最近一次代码结构调整中,我们探索出的一种适合多人开发和代码复用的复杂页面管理模式。 图 1: QQ音乐播放页 背景 MVC 在QQ音乐发展之初,播
QQ音乐技术团队
2021/07/23
3.9K1
数据流方案的思考
近两年前端开发从jquery演化到了谈必及react vue ,大部分人已经习惯了
用户2303251
2018/06/07
1.1K0
干货 | 浅谈React数据流管理
颜陈宇,携程玩乐高级前端开发工程师,前端架构组成员,目前主要负责玩乐国际化项目的App、H5以及Online三端技术架构。热衷于react技术栈,喜欢阅读和分享。
携程技术
2019/04/22
2.1K0
干货 | 浅谈React数据流管理
React全栈:Redux+Flux+webpack+Babel整合开发
1.const、let关键字:let块级作用域,const常量(如果是引用类型,那么可以修改它的属性)
硬核项目经理
2019/08/06
1.1K0
安卓软件开发:对比 MVVM 和 MVI 架构的模块设计
MVI(Model-View-Intent)和 MVVM(Model-View-ViewModel) 是安卓开发中很常见的两种架构。虽然它们的目标都是为了让代码更清晰、可维护,但在处理数据流、状态管理、以及用户交互的方式上,它们有着不同的思路。我用易懂的方式对比一下它们的区别。
Nimyears
2024/10/11
1.1K0
移动端复杂运营页解决方案的探索和实践
摘要 如何成为一名优秀的切图工程师?百度资深研发工程师潘征与大家分享自己的工作心得。 ROLE移动端酷炫运营页 2014年开始,我在我们部门负责移动端酷炫运营页面,也就是俗称的H5的研发工作。 这些酷
IT大咖说
2018/04/03
1.6K0
移动端复杂运营页解决方案的探索和实践
相关推荐
页面区块化与应用组件化
更多 >
目录
  • 应用数据抽离
    • 状态数据
    • 动态数据
    • 将数据与应用抽离
  • 应用数据管理
    • 数据的流动
      • 事件通知
      • 共享对象
      • 单方向流动
      • 树状作用域
    • 适度的管理
  • 结束语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档