obj-c模式分离模型和网络层

时间:2015-12-11 14:25:42

标签: objective-c design-patterns model-view-controller

我正在尝试改进我的应用程序模型初始化和更新的设计。

我有什么

目前我有一个或多或少的MVC结构,其中模型类包含大多数变量readonly,这些只能通过将应用程序与服务器同步来更新:将收到json文件和传递给易感模型类方法的字典

[ModelClass updatewithDictionary:(NSDictionary*)jsonDictionary] 

但是这样所有json关键字和结构,我相信应该保存在我的应用程序的网络层内,必须由模型处理。

替代

另一种解决方案是让Model为read/write并拥有Factory / initializer /实例化或更新它们的任何类。不幸的是,这会导致我的模型类的应该是私有成员。

我在寻找什么

是否存在一种模式,它会将模型与它的实例化分离,让信息隐藏原则在不使用代理类(或任何类似java的类爆炸生成方法)的情况下生存?在c ++中有点friend原则。

1 个答案:

答案 0 :(得分:1)

正如@LucaD在评论中所说,我建议从网络层返回一些DTO(数据传输对象)类,然后将其传递给模型进行更新。例如:

@interface ModelClass : NSObject
@property (nonatomic, readonly) ...

- (void)synchronizeBasedOnResponse:(ServiceResponse *)response;
@end


@interface ServiceResponse : NSObject // This is the DTO
@property (nonatomic) ...
@end


@interface MyService : NSObject
- (void)synchronizeModel:(ModelClass *)model
                 success:(void(^)(ServiceResponse *response))successBlock
                 failure:(void(^)(NSError *error))failureBlock;
@end

然后实际的JSON可以更改(在某种程度上),并且您可以在MyServiceServiceResponse的某个init方法中将模型与JSON解析代码中的更改隔离开来,同时保持ServiceResponse的公共界面相同。