现代前端架构介绍(第二部分):如何将功能架构分为三层

news2024/9/20 18:54:26

远离JavaScript疲劳和框架大战,了解真正重要的东西

在这个系列的前一部分 《App是如何由不同的构建块构成的》中,我们揭示了现代Web应用是由不同的构建块组成的,每个构建块都承担着特定的角色,如核心、功能等。在这篇文章中,我们将深入探讨功能模块,了解其面临的挑战。废话不多说,下面是第二部分的内容。

特性是一组在树的同一分支上排列的组件的集合。

这些组件需要相互通信以实现预期的业务价值。例如,当用户从列表中选择一项时,其详细信息应被检索并显示在另一个组件上。

因为分支的形状不可预测,所以通信流可以向任何方向流动,可以遵循非传统的模式。这很危险,因为它会混淆应该将数据获取代码、用户交互逻辑等放在何处的判断。这甚至可能导致具有混合关注点的组件。

将功能混杂在一起不仅违反了软件工艺的许多原则,还会使理解功能变得繁琐。代码调试变得必要,从而导致沮丧和低效。

特征内部组件之间的通信

所以,第一个挑战是:

通过将组件划分为两类来明确它们的职责:

  • 呈现组件(也称为“哑组件”):正如其名称所述,它的唯一作用是显示UI并与用户交互。它不知道自己被用于哪个领域,也不包含任何业务逻辑,因此具有很高的可重用性。列表组件就是一个很好的例子。它知道如何显示其项以及如何与用户交互,但不知道这些项是如何获取的,也不知道谁对用户事件感兴趣。
  • 容器组件(也称为智能组件):由于呈现组件缺乏上下文,容器组件充当其上下文提供者。它知道如何获取要传递给呈现组件的数据,以及如何处理用户事件。这使其了解其功能领域,因此是理想的业务逻辑宿主,但也使其更难重用。

容器组件与表现层组件之间的通信

PS:一些框架,比如 React,通过将回调函数与数据一起传递来促进单向通信。这并不与容器将数据传递并处理用户事件的事实相矛盾。

虽然容器与呈现组件之间的通信遵循一种标准模式,但不同容器或甚至功能之间的数据流仍然不清晰。它们需要共享、读取和更新应用程序中的数据。这被称为状态管理。

所以,第二个挑战是:🔥

确定谁负责管理应用程序状态并保护其免受不一致性的影响。

虽然解决这个问题的技术方案各不相同,但它们都基于一个简单的基本概念。

因为状态可以被应用程序的任何部分更新和读取,因此其管理不应由任何一方负责。

相反,将由一个全局实体负责管理App的状态。由于它是全局的,因此它是唯一的“真实”来源,从而保护状态免受不一致的影响,并使App更容易理解。

通过全局实体进行状态管理

它将状态管理的责任从容器组件中移除,并将它们转换为一个业务逻辑层,连接状态组件和表现组件。

特征层之间的通信流

这有助于实现职责分离,使每个层级只承担单一职责:

  • 状态:管理应用程序的状态并确保其一致性。
  • 业务逻辑:包含业务逻辑并为表现层组件提供上下文。
  • UI:显示用户界面并与用户交互。

如果我们希望开发人员能够快速在应用程序代码中找到所需内容,这也会对代码结构产生影响。

<span style="color:rgba(0, 0, 0, 0.8)"><span style="background-color:#ffffff"><span style="background-color:#f2f2f2"><span style="color:#242424">AppRepo
 │  
 ├──/Overview                           
 <strong>|</strong>   ├──/Components                     
 <strong>|</strong>      ├──/ListComponent               
 │      └──/ChartComponent              
 <strong>|</strong>   ├──/State                          </span></span></span></span>

状态文件夹将包含与该功能状态相关的所有内容。它与其他功能状态一起构成了整个应用程序的状态。

应用程序状态由功能状态组成。

在本文中,我们了解到如何将一个功能分解为多个层次,以规范通信流程并明确组件职责。

在下一篇文章《深入了解状态管理层及其对前端App的影响》中,我们将探讨状态层的机制,并了解它对组件的具体影响以及对整个应用程序的总体影响。

 欢迎关注公众号:清晰编程,获取更多精彩内容

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手机市场回暖,为何OPPO却“遇冷”?

在智能手机这片红海中&#xff0c;OPPO曾以其独特的营销策略和创新的产品设计&#xff0c;一度占据国内市场的领先地位。然而&#xff0c;近期的数据却揭示了OPPO正面临前所未有的挑战&#xff0c;销量下滑、库存高企&#xff0c;昔日的辉煌似乎已成过眼云烟。 当整个手机市场逐…

单个或两个及以上java安装与环境变量配置

目录 java下载地址&#xff1a; 1.安装java 1.1 安装程序 1.2选择安装路径 1.3等待安装 2.首先&#xff0c;进入环境变量 2.1 找到设置&#xff08;第一个win11&#xff0c;第二个win10&#xff09; 2.2 进入到系统高级系统设置&#xff08;第一个win11&#xff0c;第二…

快捷生成vue模板插件

Vetur < 就可以选择快捷键

Java多线程实现的两种方式

Java多线程实现的两种方式 1. 继承Thread类2. 实现Runnable接口3.总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1. 继承Thread类 直接继承java.lang.Thread类&#xff0c;并重写其run方法。这种方式简单直接&#xff0c;但限制了类…

Python3接口测试框架的整体布局与设计

实战项目整体布局概览 本实战项目基本的层级结构如下&#xff1a; 习惯性的命名规则&#xff0c;把所有的辅助类py文件放在commonsrc这个包里面&#xff0c;如数据库配置封装文件、接口配置封装文件等&#xff1b;辅助类py文件在整个项目中初期代码写好后一般是不会去大范围修…

Character.AI的联合创始人Noam Shazeer将加入谷歌;又一个开源平替llamacoder;和mem0一样的动态记忆框架

✨ 1: Character.AI 创始人回归google Character.AI的联合创始人Noam Shazeer将加入谷歌 Character.AI的联合创始人Noam Shazeer和Daniel De Freitas离开公司&#xff0c;重新加入Google旗下的DeepMind研究团队。Google签署了一项非独占性协议&#xff0c;使用Character.AI的…

Java8新特性(二) Stream与Optional详解

Java8新特性&#xff08;二&#xff09; Stream与Optional详解 一. Stream流 1. Stream概述 1.1 基本概念 Stream&#xff08;java.util.stream&#xff09; 是Java 8中新增的一种抽象流式接口&#xff0c;主要用于配合Lambda表达式提高批量数据的计算和处理效率。Stream不是…

远程控制电脑的正确姿势,3大神器助你秒变技术达人!

现在的生活节奏快得跟打鼓似的&#xff0c;不管是在家工作、帮朋友修电脑&#xff0c;还是想控制家里的播放器放个电影&#xff0c;远程控制电脑这事儿越来越重要了。有没有遇到过想用电脑却够不着的尴尬&#xff1f;别急&#xff0c;今天咱们就来看看怎么搞定远程控制电脑&…

快瞳宠物AI识别赋能养宠智能设备,让品牌大有可为

随着国内养宠市场的不断完善与成熟&#xff0c;许多家庭养宠理念从“健康养宠”向“育儿式养宠”的升级&#xff0c;国内宠物行业向高质量发展阶段迈进&#xff0c;宠物经济增长迅猛。报告显示&#xff0c;2024年宠物智能设备货架电商年销售额达2.5亿&#xff0c;增速近30%。内…

记录一次学习过程(msf、cs的使用、横向渗透等等)

目录 用python搭建一个简单的web服务器 代码解释 MSF msfvenom 功能 用途 查看payloads列表 msfconsole 功能 用途 msfvenom和msfconsole配合使用 来个例子 msf会话中用到的一些命令 在windows中net user用法 列出所有用户账户 显示单个用户账户信息 创建用户账…

x-cmd mod | x jq - 轻量级的 JSON 处理工具

目录 简介使用语法参数子命令x jq openx jq repl 简介 jq 是一个轻量级的 JSON 处理工具&#xff0c;是由 Stephen Dolan 于 2012 年开发。 使用语法 x jq [SUB_COMMAND] <#n>参数 参数描述#n继承 jq 子命令或参数选项 子命令 名称描述x jq open用浏览器打开 jqplay…

Axure入门及快速上手的法宝元件库:解锁高效原型设计之旅

在当今快速迭代的数字产品时代&#xff0c;原型设计成为了连接产品创意与实现之间不可或缺的桥梁。Axure RP&#xff0c;作为一款强大的交互原型设计工具&#xff0c;凭借其易用性、灵活性和丰富的功能&#xff0c;成为了设计师和产品经理的首选。它不仅能够帮助用户快速创建高…

Vue3 + cropper 实现裁剪头像的功能(裁剪效果可实时预览、预览图可下载、预览图可上传到SpringBoot后端、附完整的示例代码和源代码)

文章目录 0. 前言1. 裁剪效果&#xff08;可实时预览&#xff09;2. 安装 cropper3. 引入 Vue Cropper3.1 局部引入&#xff08;推荐使用&#xff09;3.2 全局引入 4. 在代码中使用4.1 template部分4.2 script部分 5. 注意事项6. SpringBoot 后端接收图片6.1 UserController.ja…

无线蓝牙耳机哪个品牌好?甄选四款专业蓝牙耳机品牌推荐

随着市场上品牌和型号众多&#xff0c;挑选出最适合自己的蓝牙耳机却变成了一项不小的挑战&#xff0c;不同的用户有着不同的需求——有的人追求音质、有的人注重续航、有的人在意舒适度&#xff0c;还有的人看重的是设计与功能性&#xff0c;那么无线蓝牙耳机哪个品牌好&#…

springboot物流寄查系统-计算机毕业设计源码95192

目 录 1 绪论 1.1 研究背景 1.2选题背景 1.3论文结构与章节安排 2 springboot物流寄查系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2…

Maven实战(三)- Maven仓库

Maven实战&#xff08;三&#xff09;- Maven仓库 文章目录 Maven实战&#xff08;三&#xff09;- Maven仓库1.Maven仓库概念2.仓库布局3.仓库分类3.1.本地仓库3.2.远程仓库3.3.中央仓库3.4.私服 4.远程仓库的配置5.远程仓库认证6.部署构件至远程仓库7.从仓库解析依赖8.镜像 1…

牛客JS题(十九)继承

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 构造函数实现类ES6类的写法原型链的应用 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"utf-8" /></head><body><script type"text…

Python数值计算(17)——Hermite插值

这次介绍一下使用差商表构造Hermite多项式的方法。 前面介绍到了两种很经典的插值多项式&#xff0c;即Lagrange和Newton插值多项式&#xff0c;并在前一篇中阐述了如何通过Lagrange插值方式构造Hermite多项式&#xff0c;这次通过牛顿差商法构造Hermite多项式。 1. 数学原理 …

学生党蓝牙耳机哪个牌子好用性价比高?四大顶尖精品蓝牙耳机揭秘

近年来&#xff0c;市面上的蓝牙耳机品牌如雨后春笋般涌现&#xff0c;各大厂商纷纷跨界合作&#xff0c;推出外观时尚、设计新颖的产品&#xff0c;以吸引各位学生党的目光。然而&#xff0c;在这繁华背后&#xff0c;不少产品却忽视了音质、舒适度及适用性等核心要素&#xf…

2024年【广东省安全员A证第四批(主要负责人)】新版试题及广东省安全员A证第四批(主要负责人)考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广东省安全员A证第四批&#xff08;主要负责人&#xff09;新版试题参考答案及广东省安全员A证第四批&#xff08;主要负责人&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及广东省安全员A证第四批&…