ios有感而发,看到c#的mvvm结构,ios搞个类似的。不完全一样(第一步)

先说明一下。之前写代码时,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,大致四层结构。

目前还是初步实现,有高人看到欢迎指点。

转载于:https://my.oschina.net/u/989459/blog/1844414

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值