iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何进行iOS 容器化框架的基本思路分析
  • 346
分享到

如何进行iOS 容器化框架的基本思路分析

2023-06-05 02:06:59 346人浏览 八月长安
摘要

这期内容当中小编将会给大家带来有关如何进行iOS 容器化框架的基本思路分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框

这期内容当中小编将会给大家带来有关如何进行iOS 容器框架的基本思路分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

前言

由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框架设计”、“网络优化”、“性能启动优化”、“自动化日志收集”、“rpc 组件设计”、“移动应用监控、诊断、定位”等具体实现,带领大家进一步了解支付宝在客户端架构上的迭代与优化历程。

下面将介绍支付宝 ioS 容器化框架设计的基本思路。

容器化实现概览

在 mPaaS 开篇介绍中已经和大家分享过《模块化与解耦式开发在蚂蚁金服 mPaaS 中的实践》:通过容器化开发框架将业务隔离成相对独立的模块,并着力追求模块与模块之间高内聚、低耦合,因此我们实现了灵活的插件式开发,并得以将业务划分为上千个独立工程。

mPaaS iOS 框架源自于支付宝客户端,为了实现这种上千个工程之间的低耦合和相关依赖调用,mPaaS 框架直接接管了 App 的生命周期,负责整个 App 启动托管、App 生命周期管理、处理与分发 UIApplication 的代理事件。

mPaaS 框架提供了容器化环境,业务开发人员在这个容器化环境中使用 微应用 和 服务 进行具体的业务需求开发。

如何进行iOS 容器化框架的基本思路分析

微应用 和 服务 是 mPaaS 框架内定义的概念,主要是用来进行业务模块间的划分。按照是否有 UI 界面作为标准,mPaaS 框架将不同的业务模块划分为 微应用 和 服务。 微应用 是 APP 运行期间带有用户界面的业务模块; 服务 是 APP 运行期由业务提供的轻量级抽象服务。在 mPaaS 框架中,通过 框架上下文Context 进行 微应用 与 服务 的生命周期管理。

应用生命周期管理

通过修改 main.m 函数的实现,mPaaS 框架使用ClientDelegate 类接管了 UIApplicationDelegate中各种 APP 生命周期。mPaaS 框架接入之后, ClientDelegate 完全替代了一般工程中的 AppDelegate 的角色,从而实现了整个应用的生命周期都是由框架进行管理。

如何进行iOS 容器化框架的基本思路分析

为了方便用户获取 APP 生命周期来开发自定义功能,mPaaS 框架提供了 DTFrameworkInterface 类里面实现了 UIApplicationDelegate 中所有代理方法的等价接入方式。

只需要在 DTFrameworkInterface 的 CateGory 中覆盖对应的方法即可。

例如下面常见的 UIApplicationDelegate 代理方法:

如何进行iOS 容器化框架的基本思路分析

在 DTFrameworkInterface 中都提供了对应的方法:

如何进行iOS 容器化框架的基本思路分析

由于 mPaaS 框架有一些自己的初始化逻辑需要实现,在 DTFrameworkInterface 中额外提供了 beforeDidFinishLaunchingWithOptions 和 afterDidFinishLaunchingWithOptions 方法,方便用户在 APP 启动时确定的时间执行自己的初始化代码。

如何进行iOS 容器化框架的基本思路分析

DTFrameworkInterface 在 afterDidFinis

LaunchingWithOptions 之前会启动 BootLoader,执行 mPaaS 框架的初始化逻辑。在嵌入式操作系统中, BootLoader 的作用是初始化硬件设备,以便为最终调用操作系统内核准备好正确的环境。类似的在 mPaaS 框架中, BootLoader用来初始化整个 mPaaS 框架环境,默认实现为依次执行下面的流程:

  • 创建 window

  • 创建主 NavigationController

  • 运行那些只运行一次就可以,并且需要率先启动的服务

  • 启动其它所有非 lazyload 的服务

  • 启动在 ServicesMap 的 "[AUTOSTART]" 数组中指定需要自动启动的服务分组

  • 显示主 Window

  • 启动 Launcher 微应用,显示出首页

这样就完成了 mPaaS 框架的初始化和首页的显示。

后面将详细介绍其中关键的3个概念: 微应用、 服务、 框架上下文Context。

微应用

微应用就是带 UI 界面的独立业务模块,其中最特殊的一个微应用是 Launcher 微应用, Launcher 作为 APP 启动之后第一个打开的微应用,一般用来创建 App 首页。在 mPaaS 框架中,各个微应用之间是高度独立、不相互依赖的。

微应用 通过 plist 配置来进行注册。配置微应用时需要指定 delegate 对应的类名、微应用的描述 description 以及打开微应用时使用的 name。这样 框架上下文Context 通过微应用的 name就可以打开指定的微应用。

如何进行iOS 容器化框架的基本思路分析

为了方便业务开发,每个 微应用 也存在生命周期。微应用的生命周期,是模仿 iOS APP 的生命周期来做的。每个微应用需要实现自己的 DTMicroApplicationDelegate 代理,这个类似于 iOS App 中实现的 Appdelege 类。

如何进行iOS 容器化框架的基本思路分析

对于具体业务开发而言 微应用 的开发和一个完整的 APP 一样,每个 微应用 负责控制自己应用内的页面堆栈,并根据 微应用 的生命周期执行相应的操作。在 mPaaS 框架中,所有的 微应用 都是运行在 mPaaS 框架提供的容器中,其不需要关注 APP 的生命周期。对于一些特殊的业务场景,mPaaS 支持创建微应用的多个实例。

如何进行iOS 容器化框架的基本思路分析

服务

服务 与 微应用 不同地方在于其没有 UI 界面,是在后台执行。一旦服务启动后,其在整个客户端的生命周期中一直存在,因此服务一般用于给微应用提供通用服务,比如执行某个功能或者获取数据等。

一个常见的服务是用户登陆状态服务,每个微应用可以通过这个服务来获取到用户的登录状态和用户信息。

服务 也是通过 plist 配置来进行注册。服务注册时需要提供服务的唯一标识 name 和对应的实现类 class 类名。框架在创建 服务 时会利用 Objective-C 语言的运行时机制创建 服务 实现类的实例。 lazyLoading 用来控制是否延迟加载该类。如果是延迟加载,在框架启动时该 服务 并不会实例化,只有在用到该 服务 时才会实例化并启动。如果是非延迟加载,则在框架启动时会启动该服务。

由于服务的特殊性,在 mPaaS 中同时提供了 ServicesMap 来批量注册类, ServicesMap 中的 [AUTOSTART] 用来说明哪些组的 服务需要在 App 启动的时候最先启动。

如何进行iOS 容器化框架的基本思路分析

这种分级启动服务的特点可以有效控制 APP 的启动时间,从而提供很好的用户体验。

每个服务都需要实现 服务 接口:

如何进行iOS 容器化框架的基本思路分析

在增加了 服务 之后,整个 App 的结构如下图所示。后台的服务成为各个 微应用 之间沟通的桥梁。

如何进行iOS 容器化框架的基本思路分析

框架上下文 Context

通过前面的介绍,大家已经对 微应用 和 服务 有了深入的了解。在 mPaaS 框架中, 框架上下文Context 承担了一个调度员的角色,负责各个 微应用 和 服务 的调度、通信管理,这样就实现了每个 微应用 的打开、页面推栈以及关闭不影响 APP 的其他 微应用 模块。

通过 mPaaS 框架提供的 DTContext * DTContextGet() 函数可以获取到框架上下文Context 对象 Context。

一个简化的 Context 类实现如下:

如何进行iOS 容器化框架的基本思路分析

对于业务开发人员,可以通过 框架上下文Context 获取到主 window、启动指定的 微应用、获取一个 服务、动态注册与反注册 服务,从而实现业务之间的连接。

上述就是小编为大家分享的如何进行iOS 容器化框架的基本思路分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何进行iOS 容器化框架的基本思路分析

本文链接: https://www.lsjlt.com/news/240753.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行iOS 容器化框架的基本思路分析
    这期内容当中小编将会给大家带来有关如何进行iOS 容器化框架的基本思路分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框...
    99+
    2023-06-05
  • 如何进行CaptureFramework框架分析
    这篇文章跟大家分析一下“如何进行CaptureFramework框架分析”。内容详细易懂,对“如何进行CaptureFramework框架分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起...
    99+
    2023-06-04
  • 如何进行数据库高可用架构的思路分析
    这篇文章将为大家详细讲解有关如何进行数据库高可用架构的思路分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。数据库高可用架构对于我们这些应用端开发的人来说是...
    99+
    2024-04-02
  • 如何进行C#实现AOP微型框架基础的分析
    如何进行C#实现AOP微型框架基础的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在向大家详细介绍C#实现AOP微型框架之前,首先让大家了解下微型框架的.cs文件,然后全面...
    99+
    2023-06-17
  • 如何进行iOS界面中框架QMUIKit的使用
    这篇文章给大家介绍如何进行iOS界面中框架QMUIKit的使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。对于移动APP来说,客户端(iOS或android)的界面开发是必不可少的工作。为了减轻界面开发的工作量,也为...
    99+
    2023-06-19
  • 如何进行jQuery源码的整体框架分析
    这篇文章将为大家详细讲解有关如何进行jQuery源码的整体框架分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。先附上jQuery的代码结构。JS代码(fu...
    99+
    2024-04-02
  • 如何进行Spring AOP框架实现的结构分析
    如何进行Spring AOP框架实现的结构分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。从实现的角度来认识SpringAOP框架。观察的角度:从外部接口,内部实现,组成部分...
    99+
    2023-06-17
  • 如何进行iOS WKWebView秒开方案的分析
    如何进行iOS WKWebView秒开方案的分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言WKWebView 秒开方案,不仅需要端上优化,也需...
    99+
    2023-06-22
  • 如何进行Docker容器测试分析
    这篇文章主要为大家分析了如何进行Docker容器测试分析的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“如何进行Docker容器测试分析”的知识吧。为了解决上...
    99+
    2023-06-28
  • 如何进行分布式事务框架GTS全解析
    今天就跟大家聊聊有关如何进行分布式事务框架GTS全解析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。全局事务服务(Global Transaction Service,简称 GTS)...
    99+
    2023-06-04
  • 如何进行Iptables的脚本分析
    这篇文章给大家介绍如何进行Iptables的脚本分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。环境:redhat9 加载了string time等模块,加载方法参照 http://bbs.chinaunix.net...
    99+
    2023-06-13
  • 如何进行JDK7新特性中fork/join框架的原理分析
    如何进行JDK7新特性中fork/join框架的原理分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原理解析:fork分解,join结合。这个框架的本质是将一个任务分解成多个...
    99+
    2023-06-17
  • 如何进行GPON光纤路由器漏洞分析
    如何进行GPON光纤路由器漏洞分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。0x00 漏洞概述日前,360-CERT监测到两个由VPNMentor...
    99+
    2023-06-19
  • 如何在 Go 框架中使用 NumPy 存储进行数据分析?
    在数据科学领域,NumPy 是一个重要的 Python 库,它提供了高效的多维数组操作和数学函数。而 Go 语言作为另一种常用的编程语言,也有其自己的优点。本文将介绍如何在 Go 框架中使用 NumPy 存储进行数据分析,帮助您更好地利用这...
    99+
    2023-08-14
    框架 numpy 存储
  • 如何进行.NET Framework架构链接库释放后的变化分析
    这篇文章给大家介绍如何进行.NET Framework架构链接库释放后的变化分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。.NET Framework架构链接库即将会向大众进行开源。那么在它实现了开源后会给开发人员...
    99+
    2023-06-17
  • 如何进行数据库的架构整体分析
    这期内容当中小编将会给大家带来有关如何进行数据库的架构整体分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  很少谈架构方面的事情,主要是因为这确实是个对知识面和知识深...
    99+
    2024-04-02
  • 如何进行Redis持久化RDB和AOF的分析
    如何进行Redis持久化RDB和AOF的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Redis持久化方案Redis是内存数据库,数据都是...
    99+
    2024-04-02
  • PHP 重定向:如何在容器化的框架中实现?
    在现代的 Web 开发中,重定向是一个非常常见的功能,它允许我们将用户重定向到一个新的 URL,以便实现各种功能,比如登录、注册、购买等。在 PHP 中,重定向可以通过 header 函数来实现,但是在容器化的框架中,如何实现重定向呢?本...
    99+
    2023-09-17
    重定向 容器 框架
  • npm如何优化ASP容器和框架的开发流程?
    随着Node.js的流行,npm已经成为前端和后端开发的标准包管理器。使用npm可以快速地安装和更新依赖项,使得项目的开发变得更加高效。尤其对于ASP容器和框架的开发流程,npm的优化可以进一步提高开发人员的工作效率。在本文中,我们将探讨如...
    99+
    2023-08-31
    容器 框架 npm
  • 如何进行基于JavaScript和CSS的Web图表框架横向对比
    如何进行基于JavaScript和CSS的Web图表框架横向对比,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。jQuery, MooToo...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作