iOS网络API设计模式的想法?

时间:2016-01-13 19:11:06

标签: ios objective-c design-patterns networking nsurl

我有以下设计模式查询问题。我有一个PHP的Web服务,我想从中执行,登录授权和SQL操作,一些使用NSDictionary响应,一些使用BOOL响应。

我已经搜索了设计模式并点击了这个:Best architectural approaches for building iOS networking applications (REST clients)

现在虽然这篇文章非常有趣,但我认为我不需要任何复杂的内容。我已经开始使用singleton对象作为assetDBConnection(在下面的代码中是self.delegate),但我不知道这是否是最好的主意。

我能想到将AssetDBConnection从我的APIWebRetrieve数据检索器中抽象出来的唯一方法是从响应中提取并比较字符串。这意味着将PHP服务级别的响应分组为类型,例如类型= “登录”,等等等等。

-(void)APIWebRetrieveFinished:(APIWebRetrieve *)api
{
    NSLog(@"api:%@",[api description]);
    NSLog(@"%@",api.dataString);
    NSError *error;
    if (api.dataString) {
        NSDictionary *results=[NSJSONSerialization JSONObjectWithData:[api.dataString dataUsingEncoding:NSStringEncodingConversionAllowLossy]
                                    options:NSJSONReadingMutableContainers
                                      error:&error];

        if ([[results objectForKey:@"type"] isEqualToString:@"logon"]){
            if ([results objectForKey:@"response"]){
                [self.delegate loginOK];
            }else{
                [self.delegate loginFail];
            }
       }
    }
}

任何帮助表示感谢。

更新 好吧,这一定非常沉闷。没有回复。我已经开始添加另一个层,称为服务。我非常喜欢这样的事实:我现在有这样的代码弹出:

#import "AssetDBConnection.h"
#import "AssetDBServiceLogon.h"

@implementation AssetDBConnection

-(BOOL)loginWithUsername:(NSString*)user andPassword:(NSString*)password
{
    [AssetDBService logonWithUsername:user password:password andDelegate:self];
}

我只是希望这是正确的方向!

1 个答案:

答案 0 :(得分:0)

<强>坦布尔韦德!

因此,为什么我可能会发布自己的答案。即我所做的实施细节。

有一个APIWebRetrieve类为所有微服务进行POST Web调用(我不太确定这是正确的术语),例如: GetAssetDetails,MoveAsset,CreateFaultForAsset。 POST调用具有操作类型,例如=。“asset-details”,并将JSON对象(转换为NSDictionary)返回到GetAssetDetails对象,然后该对象返回与原始调用类型同名的键的数据内容。然后我将它返回到AssetDBConnection Singleton,然后将其传递回单例DBConnection类的委托。

我会试着画出来......

                     CallingViewController
                              |
                              |
                              |
  ------------AssetDBConnection (Singleton)-------------
  |            |          |         |                  |
GetAssetDetail  AssetFault   OtherMS  OtherMS           OtherMS  
Instance       Instance    Instance  Instance        Instance
  |              |              |         |              |
APIWebretrieve APIWebretrieve APIWeb....  APIWeb...   APIWeb...
Instance         Instance        Instance    Instance    Instance

|字符几乎代表顶级类是较低的委托。

这个实现看起来如何? (在答案中回答问题,我会被击落)

不管答案是什么,这都是我的答案。

干杯