如何为以下(目标C)重构类似的方法?
- (void)insertNewSong:(Song *)newSong forArtist:(Artist *)artist {
NSMutableArray *newSongList = [[artist songs] mutableCopy];
BOOL hasInserted = NO;
for (int i = 0; i < [[artist songs] count]; i++) {
Song *existingSong = [[artist songs] objectAtIndex:i];
if ([[newSong title] caseInsensitiveCompare:[existingSong title]] == NSOrderedAscending) {
[newSongList insertObject:newSong atIndex:i];
hasInserted = YES;
break;
}
}
if (hasInserted == NO) {
[newSongList addObject:newSong];
}
artist.songs = newSongList;
}
- (void)insertNewArtistToSongList:(Artist *)newArtist {
BOOL hasInserted = NO;
for (int i = 0; i < [_artists count]; i++) {
Artist *existingArtist = [_artists objectAtIndex:i];
if ([[newArtist name] caseInsensitiveCompare:[existingArtist name]] == NSOrderedAscending) {
[_artists insertObject:newArtist atIndex:i];
hasInserted = YES;
break;
}
}
if (hasInserted == NO) {
[_artists addObject:newArtist];
}
}
对于insertNewSong方法,使用包含每个Song对象的NSMutableArray [艺术家歌曲]。 对于insertNewArtist方法,使用包含每个Artist对象的NSMutableArray实例变量_artists。
两种方法都将对象插入到NSMutableArray中,方法是将输入对象的text属性与数组中的text属性进行比较。
目前上述方法包含一些重复但很容易理解(在我的例子中)。我在想是否有办法将其简化为更通用的方法,并且不会损害可读性?
答案 0 :(得分:3)
没有一般规则,但这里有一些一般规则:
而且,作为一般规则,在我拥有几乎相同逻辑的第三个实例之前,我不会过于努力抽象。
(一般来说。)