《前端架构从入门到微前端》 Chapter1. 前端架构

1,136 阅读10分钟

Chapter1:前端架构

本章主要什么是软件架构,以及为什么需要软件架构,介绍了如何设计软件架构以及设计风格及两种主流架构设计方法,接着介绍了三个基本的架构设计原则,最后是关注前端相关架构设计。

本文只要摘于《前端架构从入门到微前端》 书 chapter1,著作人:黄峰达。请多多支持这位大佬,书写的很棒,本人只是看了后,做的一个笔记

前端架构是软件系统得高级结构,以及创建这种结构和系统的约束,盖房子和软件开发是相似的,需要规划、设计、实施后才能使用,盖房子最先的设计是建筑的架构,有了建筑的蓝图,还需要考虑美观、实用、坚固等要素,从各种材料中选择合适的,才能进入实施阶段,实施过程中严格按照建筑的蓝图进行施工,保证质量,才能造出所需的建筑:

  1. 如果不能完成地基的建设,那么房子就无法继续往上盖
  2. 开始盖房子时,便是在实施对应的架构,若地基有问题,房子很难长期存在
  3. 在浇筑钢筋水泥过程中,若不注意,房屋很可能歪歪扭扭
  4. 虽然房子盖好了,后期不保养和维护,仍会出现问题

开发人员需要怎样的软件架构

一个无法上线的应用架构、一个没有人完成的软件架构,一个现有技术不可行的架构,不易实现为目的的都是毫无意义的。

期望的架构应该包含一些内容:

  1. 系统间关系:明确指出该系统与其他系统之间的关系,是调用关系还是依赖关系
  2. 系统内关系:系统内各子系统之间的关系,如前端应用与后端应用,以怎样的方式通信,需要怎样的通信机制
  3. 应用内架构:包含应用相关的框架、组件,并清楚的表示出他们之间的关系
  4. 规范和原则:用于指导项目中的开发人员,编写出符合需求的代码,以构建出设计中的架构

架构的设计

架构设计并非只是一个技术工作,它包括软件工程、开发实践、业务交付等相关领域,具体步骤如下(根据项目实实际情况,部分步骤可以忽略):

  1. 收集利益相关者需求,倾听业务、项目负责人需求,进行用户需求收集(了解相关者利益,架构关注点,明确跨功能需求,罗列技术风险点)
  2. 与相关技术(如开发、测试)人员讨论,了解架构潜在限制 (需要考虑各方利益诉求,在一起讨论折中的方案)
  3. 寻找潜在可行性技术方案
  4. 整理出功能列表中的功能需求和跨功能性需求
  5. 找出会严重影响开发的风险点
  6. 和技术委员会,利益相关者反复确认方案
  7. 对架构设计进行概念证明
  8. 细化架构的部分实施细节
  9. 结合技术和业务,进行需求排期
各组织、开发人员大部分项目中有以下相同关注点

我们进行角色时,应和相关者讨论,反复确认后,我们会得到关注点的优先级,这些优先级能在后期开发设计中减少不必要的返工

关注点说明
性能应用需要达到怎样的指标、可以实现多少用户的并发
安全应用如何保障用户数据的安全、如何应付客户端、服务端的攻击
平台化应用是否作为一个平台,来承载其他系统
代码维护是不是稍有经验的开发人员能尽快上手
用户体验用户体验是否比其他几个维度更重要
罗列技术风险点

设计架构中,需要寻找系统中的一系列技术风险:

  1. 技术风险:如果某一功能的实现比较复杂,或者团队缺乏某一领域的经验,如AI,那在实践中可能会影响系统的架构
  2. 第三方系统集成:如果集成后端服务,那只需要关注对方API能否按时上线,如果使用第三方集成到系统,则需要提前进行技术评审
  3. 受限制的线上运行环境: 开发人员和运维人员分离的组织里,需要选定语言,便于维护
  4. 其他:一些需求变化会增加额外的技术膨胀,则会带来应用开发风险,则需要进行新的评估并和 相关利益人员进行讨论

架构模式

架构风格

日常的开发中,常见的风格有:

  1. 分层风格: 这是常见的架构风格,它将系统水平切分方式分为多层,一个系统由多层组成,每层由多个模块组成,每一层为上层提供服务,并使用下层提供的功能。最为人所知的架构应用是OSI 七层模型和TCP/IP 五层模型,在开发后端服务得到了广泛运用
  2. MVC架构: 这种风格相当广泛,它强调了职责分离,将软件系统分为三个基本部分:model、views、controller
  3. 发布-订阅风格:成为基于事件的架构风格,它是一对多的关系,一个对象状态发生改变,所有订阅它的对象都会得到通知。这种架构风格最大好处就是代码的解耦。
  4. 管道和过滤器:适合于处理数据流的架构模式,它将每个步骤都封装在一个过滤器组件中,数据通过相邻过滤器之间管道传输,最典型的管道-过滤器架构是UNIX shell设计。
架构设计方法

简单介绍以下两种设计方法

1. 4+1视图法
mindmap
      开发视图
          场景
            物流视图
            流程视图
            逻辑视图
    
  • 逻辑视图: 在设计期的模块、接口划分、职责及协作方式
  • 流程视图:在运行期运行的数据同步,如在微前端中数据流、控制流等
  • 开发视图:在开发期的框架、库、技术选型及对应的编译
  • 物理视图:又称部署视图,在部署期与持续交付相关的技术决策
  • 场景:又称用例视图,它使用一组用例或场景来说明架构

从上图看出设计流程如下:

  1. 架构人员根据需求创建对应的逻辑架构,开发人员进行详细设计
  2. 架构人员和开发人员需求设计物流架构,再由开发人员根据物理架构进行对应的详细设计 4+1视图是依靠软件建模和OO技术来进行架构设计,尤其在逻辑架构设计方面更符合传统的瀑布流模式,需要实现设计好各类接口,才能进入项目的开发阶段,这种很繁琐,不适合互联网应用,又不适合前端应用
2.架构开发开发:TOGAF及ADM

针对大型的企业架构可以采用TOGAF的标准设计企业架构,从1995年发布第一个版本至今,已经发布了9个版本,以目前9.2版本而言,该版本将企业架构分为4个架构域: 业务架构、应用架构、数据架构、技术架构,在没有足够时间和精力下,往往很难覆盖4个架构域描述,还有一个架构开发方法叫ADM,用于创造企业级架构,ADM分为8个阶段

  1. 架构愿景: 设定项目范围、约束和期望

  2. 业务架构:开发业务架构,用于支持设定的架构愿景

  3. 信息系统架构:开发信息系统架构,用于支持设定的架构愿景

  4. 技术架构:开发技术架构,用于支持设定的架构愿景

  5. 机会及解决方案:为前几个阶段定义架构进行初步实施计划和交付工具的识别

  6. 迁移计划:通过最终确定的详细实施和迁移计划,阐述如何从基准体系结构迁移到目标体系架构

  7. 实施治理:准备和发布架构契约,并对实施的架构进行监督,以确保实施项目符合架构要求

  8. 架构变更管理:对架构变更进行持续的监控

    TOGAF是面向大型企业的架构方法,内容比较广泛且繁琐,对应中小型企业及中小型应用比较复杂,需要按照自己的需求进行裁剪

生产架构产出物

不论采用那种架构设计,都需要留下相应的架构文档,它能为团队打下基础,在进入开发阶段时,作为普通开发人员需要得到内容如下:

  1. 架构图。 它包含了整体架构,用于显示告诉开发人员,如何构成的整个系统和每个部分之间的关系
  2. 迭代计划。按照业务和技术要求,按时间顺序排列出项目的实施计划
  3. 技术栈及选型。确定项目使用语言、框架、库等相关技术栈
  4. 示列代码。在这些代码展示架构风格及相应设计规范
  5. 测试策略。明确项目测试类型、测试流程,以及相应人员在哪些层级进行测试
  6. 部署方式。定义应用的部署方式及相应的部署方案
架构设计原则

不同的设计架构会出现不同的风格,在细节把握上也会出现特有的风格,这便是架构设计原则,常用的三个设计原则为:

  1. 不多也不少:不做多余的设计,也不缺少关键的部分
  2. 演进式: 不断的演进使架构适应当前的环境
  3. 持续性:长期的架构改进比什么都重要

前端架构的发展史

最初前端是没有架构的,因为功能简单的代码没有架构可言,通过操作DOM就能完成的工作,不需要复杂的设计模式和代码管理机制,前端开发的发展历史可分为以下阶段:

  1. 古典时期:由后端渲染出前端HTML,用table布局,用css简单辅助
  2. 动效时期:前端开始编写一些简单的JavaScript脚本做动态效果
  3. Ajax异步通信:2005年,Google在诸多web应用使用ajax做地图
  4. 通过jQuery model UI 解耦
  5. 更好的构建工具:grunt, gulp等工具
  6. 包管理:产生了用于前端的包管理工具 bower 和 npm
  7. 模块管理:AMD,Common.js等不同的模块管理方案
  8. API管理:采用swagger等api管理工具
  9. 大前端: 前端开发跨平台应用框架,采用诸多ionic,react native, flutter
  10. 组件化: 前端应用从一个个细小的组件组合而成,不在是一个大页面组件
  11. 跨框架: 在一个页面运行,可以同时使用多个前端框架
  12. 应用拆分:将一个复杂的应用拆解为多个微小的应用,类似于微服务
  13. 遗留系统迁移:让旧的前端框架,可以直接嵌入现有的应用运行

前端架构层级

  1. 系统级:前后端分离架构,微前端架构

  2. 应用级:模式库、组件库、设计系统

  3. 模块级:组件化、模块化

  4. 代码级:规范、原则、质量