邢台高端网站建设,wordpress主页设置分类,黄冈网站排名最高,做网站维护工商经营范围是什么文章目录 前言MVC架构模式基本概念通信方式简单应用 总结 前言
“MVC”#xff0c;即Model#xff08;模型#xff09;#xff0c;View#xff08;视图#xff09;#xff0c;Controller#xff08;控制器#xff09;,MVC模式是架构模式的一种。
关于“架构模式”即Model模型View视图Controller控制器,MVC模式是架构模式的一种。
关于“架构模式” 架构模式Architectural Pattern是软件架构中常见的组织结构解决方案用于指导大型软件系统的设计。它们描述了软件系统常见的组织结构和它们之间的相互关系为构建复杂软件系统提供了经验证的解决方案。架构模式提供了一种通用的、可重用的解决方案来处理在软件设计中遇到的常见问题。 常见的架构模式包括 1.分层模式Layered Pattern 将系统分割成多个层次每一层提供特定的服务并且只与相邻层次通信。例如一个典型的三层架构包括表示层用户界面、业务逻辑层和数据访问层。 2.客户端-服务器模式Client-Server Pattern 系统分为两部分服务器提供服务客户端请求服务。这种模式广泛应用于网络应用程序。 3.模型-视图-控制器模式Model-View-Controller Pattern, MVC 用于实现用户界面的分离关注点将应用程序分为三个核心组件模型数据和业务逻辑、视图用户界面和控制器业务逻辑和用户界面之间的通信。 4.管道-过滤器模式Pipeline-Filter Pattern 在这种模式中每个处理步骤过滤器作为数据流管道中的一个阶段数据流从一个过滤器流向下一个过滤器。 5.事件驱动架构模式Event-Driven Pattern 系统作为一系列异步事件和回调处理函数的集合。这种模式适用于需要高响应性和可伸缩性的应用。 6.微内核模式Microkernel Pattern 系统的核心功能由一个小型的、可扩展的内核提供其他功能则作为插件或模块附加在内核周围。 7.代理模式Proxy Pattern 为其他对象提供一个代理或占位符以控制对这个对象的访问。这在远程代理、虚拟代理和保护代理中很常见。 8.发布-订阅模式Publish-Subscribe Pattern 一种事件驱动的通信模式发布者发送事件而订阅者对这些事件做出响应但发布者和订阅者之间没有直接的联系。 9.黑板模式Blackboard Pattern 多个模块或组件通过一个共享的数据空间黑板进行通信和协作以解决复杂问题。 10.MVC的变体模式 包括表现层-业务逻辑层-数据访问层Presentation-Logic-Data Access, PLDA、模型-视图-视图模型Model-View-ViewModel, MVVM和模型-视图-适配器Model-View-Adapter, MVA等。 MVC架构模式
基本概念
‘M’——模型(Model)视图类所需要的数据例如表格需要显示的文字。 ‘V’——视图(View)屏幕上显示的UI响应用户事件接受用户输入。例如按钮标签进度条等。 ‘C’——控制器(Controller)连接视图类和模型类任务是使数据显示在屏幕上主要负责转发请求对请求进行处理。例如控制器将表格需要使用的数据“填入”表格视图中将表格视图显示出来。
关于这三者的关系我参考了如下图例来理解
斯坦福大学的iOS公开课第一课 苹果官方的图解 在这里可以看出来“V”和“M”是相互独立的在iOS开发的MVC框架中我们可以理解为view和model相互独立两者属于不知道对方的存在的陌生人关系。 ⚠️Model 和 View 是相互独立的 这是很容易犯错的一点因为MVC 架构模式是在软件设计中通用的不只是iOS 开发。iOS 开发中的MVC模式是基于传统的MVC 架构的只是在具体实现上有所不同。Apple 官方对于iOS开发中的MVC 模式和传统的MVC 架构有所不同如果查阅传统的MVC 架构会发现View 和Model 之间是有通信的。 转自 SungKaikai 文章链接 通信方式
控制器C可以直接访问模型M将模型直接作为控制器的属性。控制器C可以直接访问视图V将视图直接作为控制器的属性。模型M与视图V无法直接访问对方二者完全解耦不能引用对方把对方设置为属性。视图V到控制器C的通信 目标动作机制(target - action)用户与视图交互触发控制器的方法。例如点击按钮后实现视界面跳转网络请求刷新UI等。 委托机制(delegate)视图向控制器询问某些自己无法决定的事情或是让控制器帮助自己做一些自己独立无法完成的事情。 因为控制器才是掌握全局的角色很多时候视图是无法自己做决定的。例如表格问控制器我可以滚动么然后控制器给予回答告知是否可以继续滚动。 如果表格的高度很小那么就可以不让它滚动。但是如果表格的高度已经超过了屏幕的高度这时候如果让它自作主张无法滚动就不好了。 数据源机制(dataSource):视图让控制器给它将要显示的数据。例如音乐的数据存在于模型里控制器访问模型从模型里拿到数据后告诉视图如何显示出歌曲。模型M到控制器C的通信 广播机制(Notification)控制器注册监听某模型数据变化的广播频道当此模型数据变化后向该控制器发送广播告知模型变化情况。 KVO机制(Key-Value Observing)模型作为控制器的属性当模型属性被修改后持有此模型属性的控制器就会收到通知。
——斯坦福大学iOS开发公开课总结一iOS的MVC框架
简单应用
先看看创建的文件 1.创建 Model 模型通常是一个或多个类它们包含数据和对数据进行操作的方法。例如一个简单的Person测试模型
#import Foundation/Foundation.hNS_ASSUME_NONNULL_BEGINinterface TestModel : NSObjectproperty (nonatomic, strong) NSString *name;
property (nonatomic, strong) NSNumber *age;- (void)performAction;endNS_ASSUME_NONNULL_END#import TestModel.himplementation TestModel- (void)performAction {// 这里可以放置一些业务逻辑例如打印一条消息NSLog(Hello, my name is % and I am % years old., self.name, self.age);
}end这里的代码存在一些bug后续笔者修改后会再呈现完整代码。
总结
在模型类里是不能调用控制器的方法的模型类只能被控制器调用并且当所拥有的数据改变后通知使用自己的控制器数据的改变。更不能直接给视图通知让视图自己更新UI。
参考文章iOS 架构设计代码实例学习-MVC 模式 你真的了解MVC吗