读书频道 > 网站 > 网页设计 > iOS开发指南 : 从零基础到App Store上架(第3版)
10.4.2 采用纯Objective-C语言实现——POOO模式
15-04-22    下载编辑
收藏    我要投稿   
本书以Swift和Objective-C语言为基础进行讲解,共分4篇:第一篇为基础篇,主要讲解iOS的一些基础知识;第二篇为网络篇,主要讲解iOS网络开发的相关知识;第三篇为进阶篇,介绍了iOS高级内容、商业思考等;最后一立即去当当网订购
用纯Objective-C语言实现的分层架构如图10-12所示。打开本节案例MyNotes工程,如图10-13所示。在Xcode工程导航面板中,共有3个组,这类似于图上一节介绍的纯Swift语言实现的工程。


下面介绍代码部分。在dao组中,NoteDAO.h的代码如下:
@interface NoteDAO : NSObject
//保存数据列表
@property (nonatomic,strong) NSMutableArray* listData;
+ (NoteDAO*)sharedManager;
//插入备忘录的方法
-(int) create:(Note*)model;
//删除备忘录的方法
-(int) remove:(Note*)model;
//修改备忘录的方法
-(int) modify:(Note*)model;
//查询所有数据的方法
-(NSMutableArray*) findAll;
//按照主键查询数据的方法
-(Note*) findById:(Note*)model;
@end
在上述代码中,listData属性用于保存数据表中的数据,其中每一个元素都是Note对象。+ (NoteDAO*) sharedManager方法用于获得NoteDAO单例对象。在dao组中,NoteDAO.m的代码如下:
@implementation NoteDAO
static NoteDAO *sharedManager = nil; 
+ (NoteDAO*)sharedManager
{
    static dispatch_once_t once;
    dispatch_once(&once, ^{        

        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

        NSDate *date1 = [dateFormatter dateFromString:@"2010-08-04 16:01:03"];
        Note* note1 = [[Note alloc] init];
        note1.date = date1;
        note1.content = @"Welcome to MyNotes.";

        NSDate *date2 = [dateFormatter dateFromString:@"2011-12-04 16:01:03"];
        Note* note2 = [[Note alloc] init];
        note2.date = date2;
        note2.content = @"欢迎使用MyNotes。";

        sharedManager = [[self alloc] init];
        sharedManager.listData = [[NSMutableArray alloc] init];
        [sharedManager.listData addObject:note1];
        [sharedManager.listData addObject:note2];

    });
    return sharedManager;
}
//插入备忘录的方法
-(int) create:(Note*)model
{    
    [self.listData addObject:model];
    return 0;
}

//删除备忘录的方法
-(int) remove:(Note*)model
{
    for (Note* note in self.listData) {
        //比较日期主键是否相等
        if ([note.date isEqualToDate:model.date]){
            [self.listData removeObject: note];
            break;
        }
    }    
    return 0;
}

//修改备忘录的方法
-(int) modify:(Note*)model
{
    for (Note* note in self.listData) {
        //比较日期主键是否相等
        if ([note.date isEqualToDate:model.date]){
            note.content = model.content;
            break;
        }
    }
    return 0;
}

//查询所有数据的方法
-(NSMutableArray*) findAll
{
    return self.listData;
}

//按照主键查询数据的方法
-(Note*) findById:(Note*)model
{
    for (Note* note in self.listData) {
        //比较日期主键是否相等
        if ([note.date isEqualToDate:model.date]){
            return note;
        }
    }
    return nil;
}
@end
NoteDAO也采用了单例设计模式来实现。
在domain组中,Note的代码如下,它只有两个属性——date是创建备忘录的日期,content是备忘录的内容:

//
//Note.h
//
#import <Foundation/Foundation.h>

@interface Note : NSObject

@property(nonatomic, strong) NSDate* date;
@property(nonatomic, strong) NSString* content;

@end

//
//Note.m
//
#import "Note.h"

@implementation Note

@end
在业务逻辑层BusinessLogicLayer中,NoteBL.h的代码如下:
@interface NoteBL : NSObject
//插入备忘录的方法
-(NSMutableArray*) createNote:(Note*)model;

//删除备忘录的方法
-(NSMutableArray*) remove:(Note*)model;

//查询所有数据的方法
-(NSMutableArray*) findAll;

@end
下面是NoteBL.m中的代码:
@implementation NoteBL

//插入备忘录的方法
-(NSMutableArray*) createNote:(Note*)model
{
    NoteDAO *dao = [NoteDAO sharedManager];
    [dao create:model];

    return [dao findAll];
}

//删除备忘录的方法
-(NSMutableArray*) remove:(Note*)model
{
    NoteDAO *dao = [NoteDAO sharedManager];
    [dao remove:model];

    return [dao findAll];
}

//查询所有数据的方法
-(NSMutableArray*) findAll
{
    NoteDAO *dao = [NoteDAO sharedManager];
    return [dao findAll];
}

@end
PresentationLayer是表示层,其中的内容大家应该比较熟悉了,这里不再赘述。

 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站