区块链技术博客
www.b2bchain.cn

大厂这么做iOS(10):告别面相对象编程?!求职学习资料

本文介绍了大厂这么做iOS(10):告别面相对象编程?!求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

OOP 的核心思想 – 使用封装和继承,将一系列相关的内容放到一起。我们的前辈们为了能够对真实世界的对象进行建模,发展出了面向对象编程的概念,但是这套理念有一些缺陷。虽然我们努力用这套抽象和继承的方法进行建模,但是实际的事物往往是一系列特质的组合,而不单单是以一脉相承并逐渐扩展的方式构建的。所以最近大家越来越发现面向对象很多时候其实不能很好地对事物进行抽象,我们可能需要寻找另一种更好的方式。——王巍

大师之所以为大师,他们总是能把简单的事情说的很复杂,哦哦,不对,是概括性。我们看一下王巍大佬总结的面相对象编程的缺陷:

  • 动态派发安全性
  • 横切关注点
  • 菱形缺陷

因此我们在设计 MVVM 库的时候,需要结合实际情况,避免面相对象编程带来问题,解决方案就是面向协议编程。

协议

iOS 中的协议,即 Protocol,是大家忽视的,但却是非常强大的能力。今天我们试图解决上一篇文章中所谈到的,解决 MVVM 库中的 ViewModel 网络请求问题。
ViewModel 处理网络请求最主要的问题不是请求本身,最起码在 MVVM 中,他不是重点。重点是,我们如何在 MVVM 中处理掉网络请求(当然,也包括任何其他的耗时操作)过程中的前期准备以及事后恢复等操作,比如:

  • 网络请求前后的 Loading 动画
  • 成功/失败的预留处理

我们今天主要说的是前一条,后一条可以作为大家的课后作业去完成。第一条的设计代码我已经传到 GitHub 中,对应的库为:GJTMvvmKit,当然,大家也可以通过 CocoaPods 来获取:

pod 'GJTMvvmKit', '0.0.6'

我希望大家不要立刻打开源码查看,而是跟着我的分享思路,自己多去思考,自己编码,最后再去对比一下你的设计和我们的设计。当然,我们的 MVVM 不是唯一解决方案,但面向协议的设计应该大体差不多。

Loading 动画应该是基于协议设计的,因为

  • 不同类型的 ViewController 可能对应的动画不一样。比如说如果是 TableViewController,他的 Loading 动画就是下拉刷新,而普通页面的 Loading 则是 UIActivityIndicatorView。
  • 子类可以扩展:不同的业务可能需要不一样的 Loading 效果,因此保留子类的可扩展性也是很重要的。

OOP 的核心思想 – 使用封装和继承,将一系列相关的内容放到一起。我们的前辈们为了能够对真实世界的对象进行建模,发展出了面向对象编程的概念,但是这套理念有一些缺陷。虽然我们努力用这套抽象和继承的方法进行建模,但是实际的事物往往是一系列特质的组合,而不单单是以一脉相承并逐渐扩展的方式构建的。所以最近大家越来越发现面向对象很多时候其实不能很好地对事物进行抽象,我们可能需要寻找另一种更好的方式。——王巍

大师之所以为大师,他们总是能把简单的事情说的很复杂,哦哦,不对,是概括性。我们看一下王巍大佬总结的面相对象编程的缺陷:

  • 动态派发安全性
  • 横切关注点
  • 菱形缺陷

因此我们在设计 MVVM 库的时候,需要结合实际情况,避免面相对象编程带来问题,解决方案就是面向协议编程。

协议

iOS 中的协议,即 Protocol,是大家忽视的,但却是非常强大的能力。今天我们试图解决上一篇文章中所谈到的,解决 MVVM 库中的 ViewModel 网络请求问题。
ViewModel 处理网络请求最主要的问题不是请求本身,最起码在 MVVM 中,他不是重点。重点是,我们如何在 MVVM 中处理掉网络请求(当然,也包括任何其他的耗时操作)过程中的前期准备以及事后恢复等操作,比如:

  • 网络请求前后的 Loading 动画
  • 成功/失败的预留处理

我们今天主要说的是前一条,后一条可以作为大家的课后作业去完成。第一条的设计代码我已经传到 GitHub 中,对应的库为:GJTMvvmKit,当然,大家也可以通过 CocoaPods 来获取:

pod 'GJTMvvmKit', '0.0.6'

我希望大家不要立刻打开源码查看,而是跟着我的分享思路,自己多去思考,自己编码,最后再去对比一下你的设计和我们的设计。当然,我们的 MVVM 不是唯一解决方案,但面向协议的设计应该大体差不多。

Loading 动画应该是基于协议设计的,因为

  • 不同类型的 ViewController 可能对应的动画不一样。比如说如果是 TableViewController,他的 Loading 动画就是下拉刷新,而普通页面的 Loading 则是 UIActivityIndicatorView。
  • 子类可以扩展:不同的业务可能需要不一样的 Loading 效果,因此保留子类的可扩展性也是很重要的。

OOP 的核心思想 – 使用封装和继承,将一系列相关的内容放到一起。我们的前辈们为了能够对真实世界的对象进行建模,发展出了面向对象编程的概念,但是这套理念有一些缺陷。虽然我们努力用这套抽象和继承的方法进行建模,但是实际的事物往往是一系列特质的组合,而不单单是以一脉相承并逐渐扩展的方式构建的。所以最近大家越来越发现面向对象很多时候其实不能很好地对事物进行抽象,我们可能需要寻找另一种更好的方式。——王巍

大师之所以为大师,他们总是能把简单的事情说的很复杂,哦哦,不对,是概括性。我们看一下王巍大佬总结的面相对象编程的缺陷:

  • 动态派发安全性
  • 横切关注点
  • 菱形缺陷

因此我们在设计 MVVM 库的时候,需要结合实际情况,避免面相对象编程带来问题,解决方案就是面向协议编程。

协议

iOS 中的协议,即 Protocol,是大家忽视的,但却是非常强大的能力。今天我们试图解决上一篇文章中所谈到的,解决 MVVM 库中的 ViewModel 网络请求问题。
ViewModel 处理网络请求最主要的问题不是请求本身,最起码在 MVVM 中,他不是重点。重点是,我们如何在 MVVM 中处理掉网络请求(当然,也包括任何其他的耗时操作)过程中的前期准备以及事后恢复等操作,比如:

  • 网络请求前后的 Loading 动画
  • 成功/失败的预留处理

我们今天主要说的是前一条,后一条可以作为大家的课后作业去完成。第一条的设计代码我已经传到 GitHub 中,对应的库为:GJTMvvmKit,当然,大家也可以通过 CocoaPods 来获取:

pod 'GJTMvvmKit', '0.0.6'

我希望大家不要立刻打开源码查看,而是跟着我的分享思路,自己多去思考,自己编码,最后再去对比一下你的设计和我们的设计。当然,我们的 MVVM 不是唯一解决方案,但面向协议的设计应该大体差不多。

Loading 动画应该是基于协议设计的,因为

  • 不同类型的 ViewController 可能对应的动画不一样。比如说如果是 TableViewController,他的 Loading 动画就是下拉刷新,而普通页面的 Loading 则是 UIActivityIndicatorView。
  • 子类可以扩展:不同的业务可能需要不一样的 Loading 效果,因此保留子类的可扩展性也是很重要的。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 大厂这么做iOS(10):告别面相对象编程?!求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们