iOS开发架构,原件架构的原则

1、原件架构的原则

软件架构的七大原则以下:面试

  1. 开闭原则
  2. 依赖倒置原则
  3. 单一职责原则
  4. 接口隔离原则
  5. 迪米特法则(最小知道原则)
  6. 里氏替换原则
  7. 合成/聚合复用原则

image.png

1.开闭原则

对扩展开放,对修改关闭算法

说的是,在设计一个模块的时候,应当使这个模块能够在不被修改的前提下被扩展. 换言之,应当能够在没必要修改源代码的状况下改变这个模块的行为,在保持系统必定稳定性的基础上,对系统进行扩展。编程

例如:通常软件功能的升级就须要符合开闭原则,即不去修改原来的代码,而是去增长新功能。设计模式

2. 依赖倒置原则

实现尽可能依赖抽象,不依赖具体实现。 该原则有如下三点说明:markdown

  • 一、高层模块不该该依赖于底层模块,二者都应该依赖于抽象。
  • 二、抽象不该该依赖于细节,即具体实现类。
  • 三、细节应该依赖于抽象。

这样带来的好处,能够减小类与类之间的耦合性,提升系统的稳定性,提升代码的可读性和可维护性,而且能够下降修改程序所形成的的风险。网络

这就是咱们一般说的面向接口编程多线程

3. 单一职责原则

对于一个类而言,应该仅存在一个能够引发类变化的缘由。架构

这条原则从字面意思来讲就是:一个类、接口、方法职责尽可能单一。这样咱们就能很好的进行解耦,后期的需求变动和维护不会互相受影响,可以下降类的复杂度,提升可读性。框架

4. 接口隔离原则

客户端不该该依赖它不须要的接口,类之间的依赖关系应该创建在最小的接口上。 这个原则指导咱们在设计接口时应当注意如下几点:oop

  • 一、一个类对另外一个类的依赖应该创建在最小的接口之上。
  • 二、创建单一接口,不要创建功能繁多的总接口。
  • 三、尽可能细化接口,接口中的方法尽可能少(不是越少越好,必定要适度)。

该原则符合高内聚低耦合的设计思想,可使类具备很好的可读性、可扩展性和可维护性

5. 迪米特法则(最小知道原则)

一个对象应该对其余对象保持最少的了解,尽可能下降类与类之间的耦合。

因为每一个类尽可能减小对其余类的依赖,所以,很容易使得系统的功能模块功能独立,相互之间不存在(或不多有)依赖关系。迪米特法则不但愿类之间创建直接的联系。若是有真的须要创建联系的,也但愿能经过他的友元类来转达。

迪米特原则主要强调只和朋友交流,不和陌生人说话。出如今成员变量、方法的输入、输出参数中的类均可以称之为成员朋友类,而出如今方法体内部的类不属于朋友类 。

6. 里氏替换原则

一个软件实体若是适用一个父类的话,那必定是适用于其子类,全部引用父类的地方必须能透明地使用其子类的对象,子类对象可以替换父类对象,而程序逻辑不变。

咱们总结一下:子类能够扩展父类的功能,但不能改变父类原有的功能。

  • 一、子类能够实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  • 二、子类中能够增长本身特有的方法。
  • 三、当子类的方法重载父类的方法时,方法的前置条件(即方法的输入/入参)要比父类方法的输入参数更宽松。
  • 四、当子类的方法实现父类的方法时(重写/重载或实现抽象方法),方法的后置条件(即方法的输出/返回值)要比父类更严格或相等。

使用里氏替换原则有如下优势:

  • 一、约束继承泛滥,开闭原则的一种体现。
  • 二、增强程序的健壮性,同时变动时也能够作到很是好的兼容性,提升程序的维护性、扩展性。下降需求变动时引入的风险 。

7. 合成/聚合复用原则

尽可能使用对象组合(has-a)/聚合(contanis-a),而不是继承关系达到软件复用的目的。

换句话说,就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象经过这些对象的委派达到复用已有功能的目的。

该原则可使系统更加灵活,下降类与类之间的耦合度,一个类的变化对其余类形成的影响相对较少。

2、MVC架构

image.png

MVC 是 Model-View-Controller 的简写。MVC主要有三层:

  • Model:数据层,读写数据,保存 App 状态。
  • View:页面层,和用户交互,向用户显示页面,反馈用户行为。
  • ViewController: 逻辑层,更新数据,或者页面,处理业务逻辑。

MVC能够帮助你很好的将数据,页面,逻辑的代码分离开来。使得每一层相对独立。这样你就可以将一些可复用的功能抽离出来,化繁为简。只不过,一旦 App 的交互变复杂,你就会发现 ViewController 将变得十分臃肿。大量代码被添加到控制器中,使得控制器负担太重。

此处特别说明:若是只是为了解决VC中代码臃肿的短板,把VC中的逻辑代码按功能模块使用**分类(category)**进行拆分,只保留必要的调用接口能有效的下降VC中代码臃肿的问题。

做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是个人iOS交流圈: 无论你是小白仍是大牛欢迎入驻!! 分享内容包括面试资源宝典、逆向安防、算法、架构设计、多线程,网络进阶,还有底层、音视频、Flutter等等......

本身根据梳理网络来的的开发经验总结的学习方法,无偿分享给你们。须要的话均可以自行来获取下载。 +裙:196800191、 或者是+ WX(XiAZHiGardenia)免费获取! 获取面试资料 简历模板 一块儿交流技术资源集合

3、MVVM架构

image.png

MVVMModel-View-ViewModel的简写,是由MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。

MVVM层架结果以下:

  • Model: 数据层,读写数据,保存 App 状态。
  • View:页面层,提供用户输入行为,而且显示输出状态。
  • ViewModel 逻辑层,它将用户输入行为,转换成输出状态。
  • ViewController:主要负责数据绑定。

这里其实叫MVVM-C架构更合适。

ViewModel 是逻辑层,而控制器只须要负责数据绑定。如此一来控制器的负担就减轻了许多。而且ViewModel控制器以及页面相独立。那么,你就能够跨平台使用它。你也能够很容易地测试它。

MVVM模式使用的是数据绑定基础架构,这是MVVM设计模式的核心,在使用中,利用双向绑定技术,使得 Model 变化时,ViewModel 会自动更新,而 ViewModel 变化时,View 也会自动变化。ViewModel包含全部由UI特定的接口和属性,并有一个 ViewModel 的视图的绑定属性,当绑定的属性变化时,View会自动更新视图,因此能够把更新视图的逻辑放到ViewModel中,减小了Controller的代码,iOS实现这种绑定可使用 通知 和 KVO

ViewModel其实至关于一个黑盒子,接收输入,通过内部业务逻辑处理产出结果。

[图片上传失败...(image-da16ad-1607776281959)]

4、 总结

本文主要介绍了软件架构的七大原则MVC架构模式MVVM架构模式

无论咱们选择何种架构模式,咱们都是朝着代码的可扩展性可维护性复用性可读性去的。咱们最终的目的都是为了下降代码的耦合性,方便后续的修改、扩展和维护

MVVM模式MVC模式最大的特色并非下降了VC中代码的臃肿,而是MVMM架构模式把业务逻辑统一到了VM中处理,方便单元测试和自动化测试。

咱们在实际开发中必定要根据咱们的实际状况来选择架构模式,不要一味地追新,适合本身当下业务的架构模式才是好的架构模式,不要画虎不成反类犬。

以上只是我的看法,若有不一样看法,还望不吝赐教。

参考引用

软件架构的七大原则

RxSwift中MVVM的介绍

相关文章
相关标签/搜索