浅析iOS程序设计模式(基于MVC)
接触iOS手机开发有一段时间了。总体来说,苹果公司设计的开发环境还是非常人性化的。很容易上手,也方便深入。
在组织大型项目的代码文件时,我们常用MVC的思想。MVC的概念讲起来非常简单,就和对象(object)一样。但是理解和应用起来却非常困难。今天我们就试着探讨一下MVC设计理念。
M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
比如一批统计数据可以分别用柱状图、饼图来表示。
C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
再实际开发中,M虽然本意是业务模型,但通常被理解为数据库操作层。
V即界面层,这个没有异议。
C则被理解为业务层。
对应在ios中,V就是指.xib文件。C是指.m文件。但是,通常情况并不如我们想像的这么理想。因为客户的需求是千变万化的。很多时候,我们需要根据客户的需求对界面进行自定义。所以,很多时候界面代码和会混淆在.m文件中和控制层代码掺杂在一起。
在我个人的设想中,MVC这三层分别要完成哪些工作呢?
1、M层 模型(更多的是数据库模型)
(1)创建数据库、创建相应的表
(2)完成针对数据库各个表的增、删、改、查的操作类
(3)映射数据库各个表的实体类(这个实体类的作用就是沟通数据库层(M)和控制层(C)的桥梁,同时这个实体类也将担负其后台数据(xml、sbjson等)与本地数据的沟通和存储)
本层要实现的功能:
(1)
本层输入件:sql增加或插入数据库表对应的实体类的对象的语句
本层输出件:增加、或插入数据库
(2)
本层输入件:sql查询语句
本层输出件:返回存储实体类对象的数组
(3)
本层输入件:sql删除语句
本层输出件:删除数据库中的指定信息
2、V层 视图
不用多讲了,在ios中,这个层主要由.xib文件完成。如果客户由自定义需求,则在.m文件中实现。
本层实现的功能就是控件的布局。
3、C层 控制
这个层的意义就在于确保M和V的同步。我个人理解,这层不仅叫控制层,更应该叫业务层。
本层要实现的功能:
(1)
本层输入件:界面控件中数据和事件
本层输出件:
第一:调用M层的接口,更新M层(数据库)中的数据
第二:调用V层的接口,更新V层(界面)中的数据
在现实的开发过程中,代码真的就这么清晰地分成以上三种吗?
现实中,工程中还有以下几种类型的代码:
(1)接口文件[数据操作]
(2)解析通过接口获取的数据[数据操作]
(3)开源框架(实现各种界面效果、解析各种数据)[数据操作+V显示]
(4)工具类(比如为图片增加圆角、实现checkbox、实现各种页面效果、数据加密解密)[数据操作+V显示]
(5)本项目提炼的公用类(如验证、升级检测、数据更新等)[数据操作M]
业务层BusinessLayer:
可以调用:数据层
可以被调用:控制层
组织当前软件独特的业务体系,只处理数据,和数据层和控制层有关系,和界面层没有任何关系。
常见业务:
(1)数据同步(用到数据层数据操作和界面层的数据)
(2)软件升级
(3)登录验证
(4)账号有效性验证
控制层ControllerLayer:只负责数据层和界面层的数据同步(通过业务层来实现)
数据层DataLayer:只和数据打交道,和业务毫无关系
界面层ViewLevel:只和界面打交道,和控制层打交道,和其他层毫无关系
上面写的比较乱,来张图,看看能不能捋清楚,知道我们在实际编码过程中组织各种代码和文件:
用MVC思想重构一个项目的核心就是剥离出这个项目的业务逻辑。
什么是项目的业务逻辑?所谓业务逻辑关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计。简而言之,所谓业务逻辑就是指业务规则。凡事有规则的东西,就是业务逻辑,没有规则的东西就不是业务逻辑。
利用MVC思想组织的文件结构一例:
参考:
用自己的话讲对mvc的理解,直观 http://hi.baidu.com/javvinnet/item/c231542073c3f851c38d5944
对mvc专业的解释: http://www.cnblogs.com/shanyou/archive/2010/04/03/1703501.html
三层开发 http://baike.baidu.com/link?url=9eOHD-1z9BUIxInOTlj4yna0KRILwQNXkPa-4LEPZhfjIoBzjyx6e6Au3SEvW-eqANLCTFVgqTtYMPbAhZRh2K
转载于:https://www.cnblogs.com/ygm900/p/3473784.html
浅析iOS程序设计模式(基于MVC)相关推荐
- 基于MVC设计(Java Web程序)----图书馆系统
文章目录 基于MVC设计----图书馆系统 整体项目运行截图 登录设计(MVC设计模式) 登录功能源代码 总结 基于MVC设计----图书馆系统 这一学期学习了JavaWeb开发, 课程结束时老师给的 ...
- iOS基于MVC的项目重构总结
这是一篇关于MVC的介绍的文章,对于这个问题,我曾经感觉自己非常清晰的了解MVC的结构,后来在工作中接触到其他同事,也了解了一些其他语言的MVC,才发现,自己对MVC的理解还是非常的浅显,希望本文能对 ...
- 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表
创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...
- java_web:基于mvc设计模式实现用户登录操作
基于mvc设计模式实现用户登录操作 知识点补充:mvc理论知识 应用实例:创建一个jsp页面login,将其表单数据发送到类LoginServlet中,在该类调用类LoginDao实现用户登录操作. ...
- 从零开始搭建基于Xcode7的IOS开发环境和免开发者帐号真机调试运行第一个IOS程序HelloWorld
首先这篇文章比较长,若想了解Xcode7的免开发者帐号真机调试运行IOS程序的话,直接转到第五部分. 转载请注明原文地址:http://www.cnblogs.com/litou/p/4843772. ...
- JAVA小程序:一个基于MVC框架的贪吃蛇程序
学习JAVA也有一段时间了,之前看了翁恺老师的视频,跟着做了一个细胞自动机,粗浅地了解了一点MVC框架的知识,感觉获益匪浅.但是细胞自动机毕竟是跟着视频完成的,有很大程度上都是参考了视频里的代码,没有 ...
- iOS程序员面试笔试宝典整理
大三暑假了,各个公司的招聘都开始了,之前自学iOS都是比较零零散散,没有整体的知识体系,现在暑假在准备面试的时候,借着复习准备面试将之前学习的一些东西都整理出来,做个记录 下面是花了三天的时候阅读某宝 ...
- 【iOS沉思录】如何招聘一个靠谱的 iOS程序员+面试题详解
说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 出题者简介: 孙源(sunnyxx),目前就 ...
- iOS开发笔记--基于面向协议MVP模式下的软件设计
传统模式下的开发 MVC MVVM 基于面向协议MVP的介绍 MVP实战开发 说在前面: 相信就算你是个iOS新手也应该听说过MVC的,MVC是构建iOS App的标准模板.随着时间的推移,在iOS ...
- 分享一个BookStore ios程序的例子
经过4天的开发,ios的网络书店基本完成了: 登陆注册 图书列表,下拉放开刷新,下拉到底查看更多,图片异步加载 我的信息,查看订单修改密码 查看图书详情 加入购物车 提交订单 sqllite存放浏览日 ...
最新文章
- centos6.4 安装mysql
- java remove removeat_2016.3.12 Java中ArrayList类详解(转)
- 监控服务器项目报备,智慧环保监控预警平台运维项目
- 编程之美-数组分割方法整理
- 【机器视觉】 dev_get_system算子
- C++11新特性学习
- VMware10安装centos6.5(64位)
- response 流和写能一起吗_余甘果蜂蜜能一起吃吗?余甘果泡蜂蜜有什么功效?
- jquery-jquery对向与dom标签对向
- Spark2.0.2+Zeppelin0.6.2 环境搭建 初探
- JUnit测试框架使用介绍
- shell的EOF用法
- 选择排序——Java排序算法
- java后端简历项目经历_简历上的项目经历怎么写 ?这 3 条原则不可忽视 !
- YYText 库学习总结
- jndi step by step(2)
- 项目升级与环境变化架构侧重点
- 杨百翰大学 排名Brigham Young University,入学要求,申请条件,简介_施强留学网...
- 笔记——输入框循环使用
- S3C2440之裸机之C语言按键点亮LED灯
热门文章
- 拿了工资就要干活,不干活不是成了骗钱?
- 解决办法:C向Python传递字串数组导致进程崩溃
- 遇到ffmpeg错误:non monotonically increasing dts to muxer in stream
- 管理感悟:轮值不是记流水账
- mysql commit undo_详细分析MySQL事务日志(redo log和undo log)
- linux 安装yum 安装php
- python 读取yml文件_小白入门篇(一):Python基础之文件读取的讲解,记得收藏...
- 返回表单字符串php,PHP字符串如何截取表单内的内容?
- JAVA关键字final修饰类,Java入门之认识final关键字、权限修饰符和内部类
- php赛车,php调用接口及三分赛车平台搭建出租编写接口