Стоит ли включать контекст управляемого объекта в качестве параметра в метод? - PullRequest
2 голосов
/ 06 января 2011

Задача

Я включаю контекст управляемого объекта в качестве параметра метода при работе с Базовыми данными.

Несмотря на то, что это облегчает тестирование кода, оно запутанно.

Вопросы

  • Это хорошая или плохая практика?
  • Есть ли более простой и удобный способ сделать так, чтобы методы были тестируемыми?

Фон

Пример ниже - это фоновая операция, которая имеет собственный контекст.

Любой совет от более опытных программистов был бы очень признателен!

Код

@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
}

1 Ответ

2 голосов
/ 06 января 2011

По моему (не так скромному) мнению, я бы сказал, что это в основном вопрос стиля. Вы можете сделать это таким образом или вы можете @synthesize moc и позвонить [self moc] или self.moc.

Me? Я бы лично пошел по пути доступа, в основном потому, что ученикам не нужно было указывать, где найти объект, на который ссылается iVar. Если вы обращаетесь к чему-то, что является iVar в том же классе, я бы использовал iVar напрямую или метод доступа.

Я полагаю разница в производительности будет незначительной, поэтому я бы не стал сильно беспокоиться по этому поводу (даже если вы не спрашивали).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...