跳转到主要内容

再窥iOS架构模式

阅读需 1 分钟Tian PanTian Pan

我们为什么要在架构上费心思?

答案是:为了减少在每做一个功能的时候所耗费的人力资源

移动开发人员会在以下三个层面上评估一个架构的好坏:

  1. 各个功能分区的职责分配是否均衡
  2. 是否具有易测试性
  3. 是否易于使用和维护
职责分配的均衡性易测试性易用性
紧耦合MVC
Cocoa MVC❌ V和C是耦合的✅⭐
MVP✅ 独立的视图生命周期一般:代码较多
MVVM一般:视图(View)存在对UIKit的依赖一般
VIPER✅⭐️✅⭐️

紧耦合MVC

传统 MVC

举一个例子,在一个多页面的网页Web应用程序中,当你点击一个链接导航至其他页面的时候,该页面就会被全部重新加载。该架构的问题在于视图(View)与控制器(Controller)和模型(Model)是紧密耦合的。

Cocoa MVC

Cocoa MVC 是苹果公司建议iOS开发者使用的架构。理论上来说,该架构可以通过控制器(Controller)将模型(Model)与视图(View)剥离开。

Cocoa MVC

然而,在实际操作过程中,Cocoa MVC 鼓励大规模视图控制器的使用,最终使得视图控制器完成所有操作。

实际的 Cocoa MVC

尽管测试这样的耦合大规模视图控制器是十分困难的,然而在开发速度方面,Cocoa MVC是现有的这些选择里面表现最好的。

MVP

在MVP中,Presenter与视图控制器(view controller)的生命周期没有任何关系,视图可以很轻易地被取代。我们可以认为UIViewController实际上就是视图(View)。

MVC 的变体

还有另外一种类型的MVP:带有数据绑定的MVP。如下图所示,视图(View)与模型(Model)和控制器(Controller)是紧密耦合的。

MVP

MVVM

MVVM与MVP相似不过MVVM绑定的是视图(View)与视图模型(View Model)。

MVVM

VIPER

不同于MV(X)的三层结构,VIPER具有五层结构(VIPER View, Interactor, Presenter, Entity, 和 Routing)。这样的结构可以很好地进行职责分配但是其维护性较差。

VIPER

相较于MV(X),VIPER有下列不同点:

  1. Model 的逻辑处理转移到了 Interactor 上,这样一来,Entities 没有逻辑,只是纯粹的保存数据的结构。
  2. ==UI相关的业务逻辑分在Presenter中,数据修改功能分在Interactor中==。
  3. VIPER为实现模块间的跳转功能引入了路由模块 Router 。

参考资料

保持联系,关注我获取更多内容

阅读需 3 分钟

构架入门

架构服务于软件系统的整个生命周期,使软件系统易于理解,开发,测试,部署和操作,其目标是最小化每个业务用例的人力资源成本。O’Reilly出版的《软件架构》介绍了五种基本架构:分层架构;事件驱动架构;微核架构;微服务架构;基于空间的架构。

architecture
system design
阅读需 1 分钟

Lambda 架构

使用Lambda可以解决大数据所带来的三个问题:准确性(好);延迟(快);吞吐量(多)。lambda 架构可以指导我们如何为一个数据系统实现扩展。

architecture
system design
阅读需 3 分钟

Lyft 的营销自动化平台 Symphony

广告投放如何花更少的钱用更少的人得到更高回报?Lyft 的答案是自动化,包括LTV 预测模块 、预算分配模块、投放模块。当人从繁琐的投放任务解放出来,专注于理解用户、理解渠道、理解自身要传达给受众的信息之后,就能够获得更好的投放效果

marketing
architecture
阅读需 3 分钟

流处理和批处理框架

流处理和批处理框架概述:为什么需要它们,以及它们如何在大规模数据处理中提供容错能力和统一的任务抽象。

architecture
system design
阅读需 9 分钟

工具延迟尾部:为什么 p99 重塑了智能体架构而 p50 掩盖了问题

基于单个工具中位数构建的智能体延迟预算在生产环境中会悄无声息地失效:经过 7 个步骤后,尾部延迟开始占据主导地位,导致尽管单个工具的仪表盘显示为绿色,用户却仍在等待。本文将深入探讨为什么 p99 会重塑智能体架构,相关的工程规范是什么样的,以及哪些具有 40 年历史的分布式系统技术可以直接应用。

insider
ai-agents