iOS结构设计与实施

本文探讨了iOS项目的架构设计与实施,介绍了软件架构的不同定义及核心思想,包括抽象、分治和知识积累。作者分享了在实际工作中应用这些原则的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[https://www.gitbook.com/book/yishuiliunian/ios-architecture-design-and-deploy/details]

iOS结构设计与实施

从11月份开始自己一部分工作重心开始往架构设计上进行转移。这个也是目前项目在质量上的要求决定的。这段时间和同事一起讨论如何设计和实施结构,也算是有些想法。写下来,算是总结,也在博客上和大家交流一下,欢迎拍砖。

当然,按照我以前的习惯,说点什么的时候,首先明确的是定义。但这一次可能有点例外了,因为关于“架构”,但目前为止业界也没有给出一个明确的定义。目前比较流行的有:组成派和决策派。

按照组成派的说法:软件系统的架构就是用来将系统描述为计算机组件以及组件之间的交互。Mary Shaw和David Garlan给出了更为明确的定义:软件架构={组件(component),连接件(connector),约束(constrain)}。组件可以是独立的程序,比如数据库服务器,也可是子系统、框架、模块、类等不同粒度的软件单元,它们共同的特点都是承担一定的计算职责。连接件可以是过程调用、管道、RPC或者Web Service等,用于表示组件之间的相互作用。约束一般为对象连接时的规则,或指明构件连接的形式和条件。例如,上层构件可要求下层构件的服务,反之不行;两对象不得递规地发送消息;代码复制迁移的一致性约束;什么条件下此种连接无效等。

而决策派认为软件架构是软件一些重要方面决策的集合。这种说法的典型代表是RUP中对于软件架构的定义: 软件架构包含了关于以下问题的重要决策:

  1. 软件系统的组织;
  2. 选择组成系统的结构元素和它们之间的接口,以及当这些元素相互协作时所体现的行为;
  3. 如何组合这些元素,使它们逐渐组成更大的子系统;
  4. 用于指导这个系统组织的架构风格:这些元素以及他们的接口、协作和组合。

当然从其他的一些书籍中我们还能看到这样的一些描述:架构即约束、风险驱动的架构设计、质量驱动的架构设计。。。。。

无论哪种定义其实我感觉都在围绕着几个事情再讲:抽象、分治、知识[引自《恰如其分的软件架构》]。

抽象:对当前的问题域进行概括和精炼。尽可能的缩小问题空间。这个是个建模的过程。通过合理的抽象活动,对当前问题域进行建模。

分治:对将庞杂的大问题,拆解成相对规模较小的子问题。比如说要从北京到南极洲,可以拆解成从北京到美国,从美国到澳大利亚,从澳大利亚到南极,三个子问题。在编程中,我们常常使用的函数,类就是封装了一个个的子问题的解决方案。分治的必然结果就是职责划分,当然实现职责划分的方式,包括刚才说的函数、类。甚至包括模块和子系统等等方式。现在我们常用的Cocoapods包管理工具,就是一个很好的分治的例子。他讲IOS开发中常遇到的一些问题和需求,划分成一个个的pod。

知识:任何一个架构都不是凭空出来的。其必然是为了解决某个特定的问题而存在。为了解决这个问题,我们可能会提取出一些特定的知识来为解决改问题服务。当然这里的知识不止是像数据库技术,IO优化技巧这样的东西。甚至是,一些我们的app中遇到的特定问题,比如之前博客中说道的在SDK设计的时候,SDK在运行时污染了宿主环境,我们使用类似于VM的方式来解决。还有,使我们关于一些决定性的问题形成的公式,比如将布局代码统一写在layoutSubViews函数里面等等。

好了,上面说的三点是比较虚的东西。但是,这三点却是支撑我进行架构分析、设计和实施的核心思想。有点万剑归宗的意思。我个人认为,且不管结构设计的流派如何,上述三点及其衍生出来的方法论,对于架构设计来讲犹如巨鼎之三足。后面的整个过程中我们会反反复复的提及哈。



资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 华为移动服务(Huawei Mobile Services,简称 HMS)是一个全面开放的移动服务生态系统,为企业和开发者提供了丰富的工具和 API,助力他们构建、运营和推广应用。其中,HMS Scankit 是华为推出的一款扫描服务 SDK,支持快速集成到安卓应用中,能够提供高效且稳定的二维码和条形码扫描功能,适用于商品扫码、支付验证、信息获取等多种场景。 集成 HMS Scankit SDK 主要包括以下步骤:首先,在项目的 build.gradle 文件中添加 HMS Core 库和 Scankit 依赖;其次,在 AndroidManifest.xml 文件中添加相机访问和互联网访问权限;然后,在应用程序的 onCreate 方法中调用 HmsClient 进行初始化;接着,可以选择自定义扫描界面或使用 Scankit 提供的默认扫描界面;最后,实现 ScanCallback 接口以处理扫描成功和失败的回调。 HMS Scankit 内部集成了开源的 Zxing(Zebra Crossing)库,这是一个功能强大的条码和二维码处理库,提供了解码、生成、解析等多种功能,既可以单独使用,也可以其他扫描框架结合使用。在 HMS Scankit 中,Zxing 经过优化,以更好地适应华为设备,从而提升扫描性能。 通常,ScanKitDemoGuide 包含了集成 HMS Scankit 的示例代码,涵盖扫描界面的布局、扫描操作的启动和停止以及扫描结果的处理等内容。开发者可以参考这些代码,快速掌握在自己的应用中实现扫码功能的方法。例如,启动扫描的方法如下: 处理扫描结果的回调如下: HMS Scankit 支持所有安卓手机,但在华为设备上能够提供最佳性能和体验,因为它针对华为硬件进行了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值