先说明一下。之前写代码时,view和viewcontroller是结合很紧密的,尤其是viewcontroller,这里面写了对view的控制和业务逻辑,还有数据的操作。一点都不好。
现在增加了一层service,用于业务逻辑和数据的操作。viewcontroller只用于view的控制和栏位的check。
#import <UIKit/UIKit.h>
//#import "IServicebase.h"
@interface UIViewController (DEcontroller)
@property (nonatomic, retain) NSString *classname;
@property (nonatomic,retain) id classobj;
-(instancetype)initforvmobjname:(NSString *) vmname datamap:(NSDictionary *)dataDic;
@end
#import "UIViewController+DEcontroller.h"
#import "IServicebase.h"
#import <objc/runtime.h>
@implementation UIViewController (DEcontroller)
//@synthesize height;
- (NSString *)classname {
return objc_getAssociatedObject(self, @"classname");
}
- (void)setClassname:(NSString *)classname {
objc_setAssociatedObject(self, @"classname", classname, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (id )classobj {
return objc_getAssociatedObject(self, @"classobj");
}
- (void)setClassobj:(id )classobj {
objc_setAssociatedObject(self, @"classobj", classobj, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(instancetype)initforvmobjname:(NSString *) vmname datamap:(NSDictionary *)dataDic{
UIViewController *selfobj = [self init];
Class someClass = NSClassFromString(vmname);
id obj = [[someClass alloc] init];
if (!obj) {
return nil;
}else{
selfobj.classobj = obj;
selfobj.classname = vmname;
if ( [obj respondsToSelector:@selector(initclassdata:)] ){
[obj initclassdata:dataDic];
}
}
return selfobj;
}
@end
上述代码,我用到了分类。在分类中本来是不能使用属性的,只能有方法。但通过
#import <objc/runtime.h>
- (NSString *)classname {
return objc_getAssociatedObject(self, @"classname");
}
- (void)setClassname:(NSString *)classname {
objc_setAssociatedObject(self, @"classname", classname, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
这种做法来实现。
我把UIviewcontroller进行了扩展。每个viewcontroller都有一个依赖service。
#import <UIKit/UIKit.h>
@interface IServicebase:NSObject
-(void) initclassdata:(NSDictionary *)dataDic;
@end
#import <Foundation/Foundation.h>
#import "IServicebase.h"
@implementation IServicebase
-(void) initclassdata:(NSDictionary *)dataDic{
NSLog(@">>>>>>>>>>>>>>>abc<<<<<<<<<<<<<<<<");
}
@end
上述就是service,依赖于viewcontroller。这样的设计模式就把软件分层,各层耦合度降低。
view----viewcontroller----service----model,大致四层结构。
目前还是初步实现,有高人看到欢迎指点。