美文网首页
本地播放器重构 —— 组件化和解耦

本地播放器重构 —— 组件化和解耦

作者: 宋奕Ekis | 来源:发表于2021-03-11 08:33 被阅读0次

之前H2的播放器进行过一次重构,旨在将UI,交互,数据和各个业务功能拆分开来。

来到H2O之后,由于也是当年老播放器一样的问题,所以准备这个月进行了一次相同目的的重构。

并且,基于之前的经验,这次的思维更加成熟了一些。

在谈播放器重构前,我们先来谈谈组件化

组件化一直是我们最近技术工作的关键词,并且后面的各个控件都尽量使用组件化思想。

那么我们为什么需要做组件化呢?我们的目的主要有以下几个:

  1. 提高代码复用率,减少重复工作

  2. 统一App内的设计语言

  3. 约束一条产品->UI->技术的工作流程和语义说明。减少沟通成本

基于以上,作为技术人员,我们究竟应该符合设计一个组件呢?

用播放器来举例,

首先,一个组件,会有三个职能:

  1. 内在功能职能

    这个组件本身是做什么用的,最基础的功能是什么?

    例如,H2O本地播放器的内在功能职能,就是用来播放下载的课程视频。

    再例如,一个弹框的内在功能就是在全局之上,弹出一个蒙层,蒙层之上再弹出一个区域作为弹框载体

  2. 展示职能

    这个组件具体长什么样子,根据UI设计,会有不同的样子。

    例如,播放器中会有暂停按钮,进度条等等,这些就算没有,也不影响播放器本身的功能,就是播放视频

    再例如,弹框组件中,会有标题,副标题等等,就算没有这些,也不影响弹框本身的功能就是弹出一个额外页面

  3. 交互职能

    例如,播放器提供播放暂停,镜面等等功能

    再例如,弹框提供展示信息,点击按钮反馈等功能

其中,交互职能和展示职能大部分时候是相关的,交互的前提是让用户知道这里可交互,所以需要展示。

BVDvHe.png

接下来,在上面描述的基础上,我们来看看,这次播放器的重构是如何设计,抽离,实现的。

播放器经过上面的思维过滤之后,拆分为下图所示模块:

BVsadg.png

其中,播放器最中心的功能就是播放视频,围绕这层之上的,

是我们的第一层业务需求,即:

  1. 播放片头视频,动作视频,以及全部动作结束后的片尾视频
  2. 在整个播放进程当中,需要有和当前动作视频绑定的指导人声音频,以及穿插在整个播放过程中的背景音乐音频

这个时候,几乎还不牵扯UI,我们的诉求目前为止只是加载资源播放而已。

接下来,是我们的第二层业务需求,即:

  1. 需要有控制页面,可以控制播放器,播放/暂停/上一个动作/下一个动作/全屏播放/镜面播放/调整音量大小
  2. 需要有信息展示,第几个动作/播放总时长/当前动作播放时长 等等

随之而来的,就是各个功能在播放器中的视觉体现,以及交互效果。

第三层,即:

  1. 数据上报

  2. 广告展示

  3. Apple watch交互

  4. siri

    等等。。。

这个时候我们反过来推论,如果没有第三层,第二层可以单独成立吗?没有第二层,第一层可以单独成立吗?

结论显然是可以的,他们之间都是在之前一层之上增加的功能,在代码实现时,也应该遵循这种原则,避免过度的耦合。

在上面的图中,我们可以看到两个相对突兀的存在:

  1. 播放上报信息收集者
  2. 播放时间信息观察者

他们也是因为业务需要才加的,但是为了避免第一层和第二层之前存在直接的耦合,所以增加中间信息传递者。从第一层收集信息,然后发送给第二层。

其中,第二层由于各个业务众多,我们也需要将其每一个都模块化,进行引入式添加,这样,即使我们后面增加一个功能,减少一个功能,都对原有的模块以及其API是不影响的。

即使,未来增加的功能会牵扯到之前的模块,我们也可以增量添加。

面对一个乍一眼看过去非常复杂的需求,作为技术人员,应该学会本能地运用这种思维工具,将其层层剖析,一点点拆分开来。

接下来,贴上工程中的分布:

BVcUeK.png

Let’s think!

相关文章

  • 本地播放器重构 —— 组件化和解耦

    之前H2的播放器进行过一次重构,旨在将UI,交互,数据和各个业务功能拆分开来。 来到H2O之后,由于也是当年老播放...

  • 组件化

    组件化 概况: 提高编译速度、提升协作效率、功能重用 代码重用和解耦 组件模式和集成模式切换 if (iMisMo...

  • 第1章 组件单独调试与集成发布

    1、组件化思路 “聚合和解耦是项目架构的基础”,站在组件化项目角度,第一步期望子组件可以作为APP单独调试和壳AP...

  • 架构设计原则

    架构坚持组件化,持续重构,小而美。架构设计十大原则: 1.全面解耦原则:对业务进行抽象建模,业务数据与业务逻辑解耦...

  • iOS组件化方案实战

    目录 简述 为什么要项目组件化 组件化架构思路 业务模块解耦 组件化实施流程解耦主题国际化切换PrefixHead...

  • 组件化

    为什么组件化? 解耦 解决项目庞大 编译慢 怎么做? 思路:1.模块化项目 可按功能或者业务对项目进行划分重构2....

  • iOS 组件化(一)

    组件化 组件化就是将模块单独抽离,分层,通过制定的通讯方式,实现解耦 组件化优点 模块间的解耦 模块重用 提交团队...

  • iOS使用pod创建本地库

    前言 随着项目变得越来越大,我们的工程需要进行拆分和解耦。组件化的形式是目前一种解耦的方式。在iOS中,模块之间完...

  • iOS组件化及架构设计(转)

    一篇开源代码的组件化方案 关于组件化 网上组件化的文章很多。很多文章一提到组件化,就会说解耦,一说到解耦就会说路由...

  • iOS组件化及架构设计

    关于组件化 网上组件化的文章很多。很多文章一提到组件化,就会说解耦,一说到解耦就会说路由或者runtime。好像组...

网友评论

      本文标题:本地播放器重构 —— 组件化和解耦

      本文链接:https://www.haomeiwen.com/subject/faxrnktx.html