以下の同様のメソッドをリファクタリングするにはどうすればよいですか (Objective 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 メソッドでは、各アーティスト オブジェクトを含む NSMutableArray インスタンス変数 _artists が使用されます。
どちらのメソッドも、入力オブジェクトのテキスト プロパティを配列内で見つかったテキスト プロパティと比較することにより、オブジェクトを NSMutableArray に挿入します。
現在、上記の方法には重複が含まれていますが、理解しやすいです(私の場合)。より一般的な方法に単純化する方法があり、読みやすさを損なわないかどうかを考えていましたか?