MVC结构


MVC是什么:
ios开发,用的设计模式就是MVC模式,
MVC分为3层结构,分别有各自不同的功能
Model层:主要控制数据部分
View层:是主要与用户进行交互的视图层
Controller层:是用来协调M层与V层之间的关系,调整显示数据的方式!

但在现在实际的工作当中,我发现他们之间并不是那么简单,想要真正的做到MVC结构,还有好多的细节。经过这段时间的项目经验,有点心得,现在就记录下来。

数据的来源、结构、关系
我们做项目,离不开界面和数据,但是还有一只隐形的手在控制这两个。那就是Controller。
在实际操作也就是编写代码的时候,先要弄明白 数据从哪来,一般他有两种途径:1网络解析 2从本地数据库或文件读取;在开发过程中,这两个数据有什么联系,这个需要根据需求为他们做关联,网络解析,那么一定是解析实时的数据,而本地数据大多是固定的数据,或者改动较少的数据,那么本地数据的数据是从哪来的,如果改动那么更新数据又从哪来?

在大多软件,界面显示的固定内容,如:账号、密码、登陆、背景图片、控件图片、软件启动声音文件等,这样的数据,由于他的稳定性所以一般存在于本地数据源,这样的数据我成为硬件数据;那么对应的应该有个软数据,软数据是什么呢,我把软数据理解为服务器上的信息,由于服务器数据量庞大,我们无法一次性把所有的数据一直到软件内部,即使可以,那么本地有了服务器所有的数据,他的运行速度,也会受到影响,退一万步说,即使不受影响,数据可以全部移植,那么他和服务器还有什么区别,也就失去了软件的含义。本地想要获取服务器数据,就要分批量解析,如果是用户常用的(解析数量较多的)就可以选择下载到本地的数据库中,这样做有两个好处:1在解析与本地数据库相同的数据时可以做判断,相同的数据直接从本地读取,加快运行速度,还有就是在没有网的情况下用户一样可以读取数据。

在分析完了数据源的问题,我们就可以对数据简历模型,界面的显示交互之间的逻辑需要设计,那么数据的传输及管理也需要我们设计。

个人把数据分为2种类型
1文本形式 
2多媒体格式(图像、声音、视频等)。注:我开发时间不长,经验尚浅,直接触到这几种。勿喷

文本格式 对于 数据单一,且类型同一的,我用表结构:plist,对于有一定层次划分但数据规整数据量不大的情况下,我用数据库(SQLite);如果是大量的数据用XML文件或者text文件去存储;至于多媒体文件,一般采用文件夹来储存(沙盒内创建相应的文件夹)。

知道了数据库的存储环境,那么我们该怎样管理数据呢?
下面我做了以下几点总结:
流程:每次先判断数据库是否有数据,如果有直接读取数据库,将数据库的值付给界面
为了方便管理,我见了以下几个类
1 网络解析数据的类,功能:只负责调用网络解析的接口,从服务器端解析数据
2从本地读取数据的类,功能:负责调用读取文件、数据库,从本地取出相应的数据
3为了实现真正的分离定义一个共有类,功能:对以上两个类进行管理,并抽取数据添加到界面。
4对象类,功能:这个对象他有很多属性与数据库的各个键对应,在读取数据库时做一个映射。

具体的逻辑:(伪代码,暂且用数据库代替所有本地数据)
Public Class.h
-(Set)addDataToView;

-(Set)addDataToView
{
 
 read From DB //从数据库读取数据
if (DB==nil)//数据为空
{
  [web request]//请求数据
  [add data to DB]//添加到数据库当中
   read From DB //从数据库读取数据
function(DB.Value=Object.publicValue)
//读取数据同时让其对模型对象的每一个属性做一个映射
 
view.data = 
Object.publicValue//数据添加到界面
 
}
 else if(DB)//数据库有数据
{
read From DB //从数据库读取数据
function(DB.Value=Object.publicValue)//读取数据同时让其对模型对象的每一个属性做一个映射
 
view.data = 
Object.publicValue//数据添加到界面
 
}
}

这样我每次只需要做一个操作调用

-(Set)addDataToView;方法,实际就是每次都从数据库取值。这样就可以做到数据、界面、控制分离。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值