MVC中Model的设计
一般在定义ViewController的时候,都习惯定义一个BaseViewController作为基类(即父类)。这样做的好处是:把公共的属性提出来放在BaseViewController中,试代码结构更清晰。同样,设计Model的时候,也可以定义一个基类。
比如:有一个房子,房子里面有一个电视和许多个桌子。电视和桌子分别有价格和型号。
定义基类LGObject
LGObject.h:
// // LGObject.h // LGAlertViewDemo // // Created by apple on 15/4/6. // Copyright (c) 2015年 LiGang. All rights reserved. // #import <Foundation/Foundation.h> @interface LGObject : NSObject @property (readonly, nonatomic) id data; - (id)initWithData:(id)data; - (BOOL)isEmpty; @end
LGObject.m:
// // LGObject.m // LGAlertViewDemo // // Created by apple on 15/4/6. // Copyright (c) 2015年 LiGang. All rights reserved. // #import "LGObject.h" @implementation LGObject - (id)initWithData:(id)data { self = [super init]; if(self) { _data = nil; if(data != nil) _data = data; } return self; } - (BOOL)isEmpty { return _data == nil ? YES : NO; } @end
定义房子LGHouse、电视LGVideo、桌子LGDesk
电视LGVideo、桌子LGDesk可以放在LGHouse里面。多个桌子需要定义一个数组:arrayDesk。
LGHouse.h:
// // LGHouse.h // LGAlertViewDemo // // Created by apple on 15/4/6. // Copyright (c) 2015年 LiGang. All rights reserved. // #import "LGObject.h" @class LGVideo; @class LGDesk; @interface LGHouse : LGObject @property (nonatomic, readonly) LGVideo *video; //电视 @property (nonatomic, readonly) NSArray *arrayDesk; //桌子 @end @interface LGVideo : LGObject @property (nonatomic, assign) float money;//价格 @property (nonatomic, readonly) NSString *type;//型号 @end @interface LGDesk : LGObject @property (nonatomic, assign) float money;//价格 @property (nonatomic, readonly) NSString *type;//型号 @end
LGHouse.m:
// // LGHouse.m // LGAlertViewDemo // // Created by apple on 15/4/6. // Copyright (c) 2015年 LiGang. All rights reserved. // #import "LGHouse.h" @implementation LGHouse - (LGVideo *)video { return [[LGVideo alloc] initWithData:[self.data objectForKey:@"video"]]; } - (NSArray *)arrayDesk { NSMutableArray *arrayDesk = [NSMutableArray array]; for (NSDictionary *dickDesk in [self.data objectForKey:@"desks"]) { [arrayDesk addObject:[[LGDesk alloc] initWithData:dickDesk]]; } return arrayDesk; } @end @implementation LGVideo - (float)money { return [[self.data objectForKey:@"money"] floatValue]; } - (NSString *)type { return [self.data objectForKey:@"type"]; } @end @implementation LGDesk - (float)money { return [[self.data objectForKey:@"money"] floatValue]; } - (NSString *)type { return [self.data objectForKey:@"type"]; } @end
以上是我对Model设计的简单理解,如果你有更好的想法,欢迎告诉我。
我的博客地址:http://www.superqq.com/
demo下载地址:https://github.com/worldligang/ModelDemo
更多iOS技术请关注微信公众号iOS开发:iOSDevTip
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。