Objective c 我应该将托管对象上下文作为参数包含到方法中吗?
问题 在处理核心数据时,我将托管对象上下文作为方法的参数 虽然这使得代码更容易测试,但它很混乱 问题Objective c 我应该将托管对象上下文作为参数包含到方法中吗?,objective-c,cocoa,methods,coding-style,Objective C,Cocoa,Methods,Coding Style,问题 在处理核心数据时,我将托管对象上下文作为方法的参数 虽然这使得代码更容易测试,但它很混乱 问题 这是好的还是坏的做法 有没有一种更简洁、更简单的方法来保持方法的可测试性 背景 下面的示例是一个具有自己上下文的后台操作 任何来自更有经验的程序员的建议都将不胜感激 代码 @interface JGTrainingGroupCleanupOperation : JGCoreDataOperation { NSManagedObjectContext *imoc; } ... @
- 这是好的还是坏的做法李>
- 有没有一种更简洁、更简单的方法来保持方法的可测试性
@interface JGTrainingGroupCleanupOperation : JGCoreDataOperation {
NSManagedObjectContext *imoc;
}
...
@implementation JGTrainingGroupCleanupOperation
-(void)main {
[self startOperation]; // Setting up the local context etc
[self cleanupTrainingGroupsInMOC:imoc];
[self finishOperation];
}
-(void)cleanupTrainingGroupsInMOC:(NSManagedObjectContext *)moc {
NSSet *trainedGroups = [self fetchAllTrainedGroupsInMOC:moc];
[self deleteDescendantsOfGroups:trainedGroups fromMOC:moc];
[self removeStubAncestorsOfGroups:trainedGroups fromMOC:moc];
}
-(NSSet *)fetchAllTrainedGroupsInMOC:(NSManagedObjectContext *)moc_ {
return [moc_ fetchObjectsForEntityName:kTrainingGroup withPredicate:[NSPredicate predicateWithFormat:@"projectEditedAtTopLevel == nil"]];
}
-(void)deleteDescendantsOfGroups:(NSSet *)trainedGroups fromMOC:(NSManagedObjectContext *)moc_ {
// More code here
}
-(void)deleteDescendantsOfGroup:(JGTrainingGroup *)trainedGroup fromMOC:(NSManagedObjectContext *)moc_ {
// More code here
}
在我看来(不是那么谦虚),这主要是风格的问题。您可以这样做,也可以@合成
主运行中心并调用[self-moc]
或self.moc
我?我个人会选择访问器路径,主要是因为不必告诉类成员在哪里可以找到iVar取消引用的对象。如果要访问同一类中的iVar,我会直接使用iVar或访问器
我相信性能上的差异可以忽略不计,所以我不会在这方面花费太多精力(即使你没有问) 正如所有好的答案一样,事后看来,这是显而易见的。当然,这是做这件事的方法。真不敢相信我竟然没有想到这一点。非常感谢你的帮助!