我正在尝试改进我的应用程序模型初始化和更新的设计。
我有什么
目前我有一个或多或少的MVC结构,其中模型类包含大多数变量readonly
,这些只能通过将应用程序与服务器同步来更新:将收到json文件和传递给易感模型类方法的字典
[ModelClass updatewithDictionary:(NSDictionary*)jsonDictionary]
但是这样所有json关键字和结构,我相信应该保存在我的应用程序的网络层内,必须由模型处理。
替代
另一种解决方案是让Model为read/write
并拥有Factory / initializer /实例化或更新它们的任何类。不幸的是,这会导致我的模型类的应该是私有成员。
我在寻找什么
是否存在一种模式,它会将模型与它的实例化分离,让信息隐藏原则在不使用代理类(或任何类似java的类爆炸生成方法)的情况下生存?在c ++中有点friend
原则。
答案 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可以更改(在某种程度上),并且您可以在MyService
或ServiceResponse
的某个init方法中将模型与JSON解析代码中的更改隔离开来,同时保持ServiceResponse
的公共界面相同。