架构模式
面试题
- 讲解 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 加载网络数据。。。这个逻辑也太简单了,到处都是漏洞,首先如果没有本地数据就加载网络数据,那么如果一直没有本地数据就永远加载网络数据去了,这一点可能你会说加载网络数据之后就保存到本地啊,但是保存到本地之后,下次及以后就永远都是使用本地数据不去走网络请求了啊。。。搞不明白,搞这么多层是想干什么
设计模式
这个就是面向对象语言的设计模式了,跟架构模式不相干。。。十分简单的介绍了一下,并没有讲到位。完全没有必要放在这里,而且面向对象语言的设计模式完全可以单开一门课程的。
面向对象语言的设计模式,其实是一些特定问题的经过验证的解决方案,经验总结:
可以分为三大类
- 创建型模式:
- 结构型模式:
- 行为型模式:
三分钟讲完面向对象编程语言的设计模式了,还有谁,建议看相关书籍了。。。