面试题

  • 讲解 MVC、MVVM、MVP 以及你在项目里具体是怎么写的?
  • 你自己用过哪些设计模式?
  • 一般开始做一个项目,你的架构是如何思考的?

什么是架构?

感觉MJ这块讲的不是很好,可能这个确实还是比较抽象,建议多结合ai总结吧。

常见的架构有

  • MVC
  • MVP
  • MVVM
  • VIPER
  • CDD

MVC

Apple 官方的 MVC 指的是 Model、View、Controller。Controller 持有 View 和 Model,内部处理协调 View 和 Model 的逻辑。UIKit 框架中的视图框架如 UITableView,UICollectionView 等视图都是典型的 MVC 架构中的 View 层,这些视图不持有任何模型数据。而是在控制器中给视图提供数据。这样的做法让 UIKit 的视图得到了充分的复用。但是这种情况下,Controller 里面的代码会随着业务的增加导致越来越臃肿。因为所有的代码都写在 Controller 里面了。

优点

  • View 和 Model 的可重用性高。

缺点

  • Controller 内的代码会必然越来越多。

MVC-变种

呃,就是 View 持有了 Model,但是 Controller 依旧持有 Model。例子就是一个非常简单的组合视图,APP 图标和底部的名字。新建一个继承自 UIView 的 AppView,让它拥有一个 App 的 Model 属性。。。感觉好鸡肋。意思是按照 Apple 的 MVC 做法,AppView 是不持有 Model 的,但是将其视图暴露给外部。而这种做法就是 AppView 不暴露视图给外部,但是提供一个模型属性暴露给外部。外部给模型赋值就行了。

MVP

  • Model 模型
  • View 视图
  • Presenter 主持者,主持人

这里应该贴代码了。。。控制器持有 Presenter。Presenter 也持有控制器,但是是弱引用的。

感觉就是把控制器的一些逻辑移动到 Presenter 里面去了啊。相当于是 Controller 持有 Presenter,而 Presenter 代替 Controller 成为了 View 和 Model 的交流中心。

MVVM

看着跟 MVP 一样啊。Presenter 换了个名字而已。。。ViewModel。MJ 说什么双向绑定。。。属性监听?

AppView 持有 ViewModel,ViewModel 然后。。。看不懂

什么 RAC 太重了?又是 KVO 怎么麻烦了?结果直接使用 FBKVOController?

在 AppView 的 ViewModel setter 方法里面,监听 ViewModel 的属性,但是 ViewModel 属性发送变化时,更新 AppView 的视图。

感觉讲的真的还是很勉强。。。最后说什么 VIPER、CDD 都是前面的变种。。。

分层架构

  • 界面层
  • 业务层
  • 数据层

这个讲的更抽象。。。呃,感觉是为了赶紧结课,匆匆了事

NewsService 类提供一个 API 加载数据,内部实现是使用 DBTool 加载本地数据,如果没有本地数据,使用 HPPTTool 加载网络数据。。。这个逻辑也太简单了,到处都是漏洞,首先如果没有本地数据就加载网络数据,那么如果一直没有本地数据就永远加载网络数据去了,这一点可能你会说加载网络数据之后就保存到本地啊,但是保存到本地之后,下次及以后就永远都是使用本地数据不去走网络请求了啊。。。搞不明白,搞这么多层是想干什么

设计模式

这个就是面向对象语言的设计模式了,跟架构模式不相干。。。十分简单的介绍了一下,并没有讲到位。完全没有必要放在这里,而且面向对象语言的设计模式完全可以单开一门课程的。
面向对象语言的设计模式,其实是一些特定问题的经过验证的解决方案,经验总结:
可以分为三大类

  • 创建型模式:
  • 结构型模式:
  • 行为型模式:

三分钟讲完面向对象编程语言的设计模式了,还有谁,建议看相关书籍了。。。