我正在尝试为 AFNetworking 中的独特性设计一个良好的架构。考虑这种情况,例如,一个用户可以拥有许多事物,并且每个事物与它的拥有用户具有对称的一对一关系。
例如,在登录时初始化用户的模式很清楚。从解析的数据中创建一个 Thing 对象数组,并将其设置在 User 上。(见下文。)类似的“更新”方法是类似的。
**User.m:**
- (id)initWithAttributes:(NSDictionary *)attributes {
// snip. . . .
_userID = [[attributes valueForKeyPath:@"id"] integerValue];
_username = [attributes valueForKeyPath:@"username"];
_avatarImageURLString = [attributes valueForKeyPath:@"avatar_image.url"];
NSArray *thingsData = [attributes valueForKeyPath:@"things"];
NSMutableArray newThings = [NSMutableArray array];
for (NSDictionary *aThing in thingsData) {
Thing *thing = [[Thing alloc] initWithAttributes:aThing];
[newThings addObject:thing];
}
self.things = [newThings copy];
return self;
}
但是如何处理 Thingsuser
属性,尤其是当获取大量可能具有指向不同用户、一些登录用户和一些其他用户的指针的事物时?
考虑 AFNetworking 项目中的示例代码:
**Thing.m**
- (id)initWithAttributes:(NSDictionary *)attributes {
// Init, etc . . . .
_user = [[User alloc] initWithAttributes:[attributes valueForKeyPath:@"user"]];
return self;
}
这段代码创建了大量悬空的用户对象,显然不是要走的路。最好的解决方案类似于 EOF/CoreData 所做的事情,根据需要在关联对象中出错并维护基于 ID 的数据库。我可以复制该功能,但这似乎是一个很常见的用例,我希望它已经完成。
我不想仅仅为了这个功能而使用 RestKit;这对这个应用程序来说太过分了。
对好的模式有什么建议吗?我是否缺少 AFNetworking 中的一些摇滚功能?