ORM -对象关系映射

 ORM 我在做JAVA 的时候接触过Hibernate,里面有提到这个词,当时就知道是做持久层的技术,object/relation mapping。

最近在研究ios框架的时候又看到了这个词。beeframework,easyIOS里面都有封装,但我做的应用很少用到对象持久化,所以也只是看了个大概,略微记录一下。

ORM 说白了 就是抛弃了SQL复杂语句,让开发人员的关注点可以放在其他地方,ORM来帮你做数据持久部分的工作。现在你再也不需要去写一行行的SQL语句(其实我挺喜欢SQL语法的)。他的工作机制是实现了一个数据库与对象之间的映射,它代表了数据库,但是形式又是开发人员喜闻乐见的形式——类。所以开发人员很乐于去接受这种东西在beeframework中定义了BeeActiveRecord,实现数据库与BeeActiveRecord的序列和反序列化。通常我们在做离线缓存时采用CoreData,bee采用的是DB的方式。查看BeeActiveRecord的父类BeeDatabase,可以看到一些开源软件上用的很欢的以Block为参数的写法。 

@interface Weather : BeeActiveRecord
@property(nonatomic,strong) NSString *city;//城市
@property(nonatomic,strong) NSString *temp;//气温
@property(nonatomic,strong) NSString *WD;//风向
@property(nonatomic,strong) NSString *WS;//风力
@property(nonatomic,strong) NSString *time;//发布时间
@end

@interface WeatherModel : BeeModel
@property(nonatomic,strong) Weather *weather;

-(void)loadOnline;//查询天气
-(void)loadCache;//读取历史记录

@implementation WeatherModel

-(void)loadOnline{
    [self sendMessage:WeatherController.LOAD_WEATHER];
}

-(void)loadCache{    int count = Weather.DB.WHERE(@"city",@"北京").COUNT().resultCount;    if (count>0) {
        self.weather = [Weather.DB.WHERE(@"city",@"北京").GET_RECORDS() lastObject];
    }
}

- (void)saveCache
{  [NSObject cancelPreviousPerformRequestsWithTarget:self];  [self performSelector:@selector(asyncSaveCache) withObject:nil afterDelay:0.1f];
}


- (void)asyncSaveCache
{  _weather.SAVE();
}

- (void)handleMessage:(BeeMessage *)msg
{  [super handleMessage:msg];
}

- (void)handleWeatherController:(BeeMessage *)msg
{  if ( [msg is:WeatherController.LOAD_WEATHER] )  {    if ( msg.succeed )    {      NSDictionary *dict = [msg.output dictAtPath:@"result"];            if (dict) {
                self.weather = (Weather *)[dict objectForClass:[Weather class]];
                [self saveCache];
            }            
    }  }
    [super handleMessage:msg];
}@end


ORM虽然好,但是需要注意几点。

1 它存在于整个持久层,甚至于你的整个程序,所以影响很大,使用需谨慎,如果你真的需要比如需要大量的本地存储查找,那它是你不二的选择。

2 如果设计不当,很有可能造成灵活性很差,从而引起不必要的麻烦,在开发的时候畏首畏尾。机械的套用它,是我不建议的,还是希望开发人员可以了解一点数据库的知识,这样使用起来才更加得心应手。

你可能感兴趣的:(orm,beeframe)