Imagine two type of content in an app: "Songs" and "Films".
I have two helper methods that are really similar:
/**
* @protected <-- No need to validate arguments, as the method is "protected".
* ...
*/
function fillRemainingSongsList(currentSongs, currentUserId) {
const remainingSongs = MAX_LIST_SIZE - currentSongs.length;
const shouldFetchTrending = Math.random() < FETCH_TRENDING_PROBABILITY;
const promises = [
api.songs.getRandomSongs(),
shouldFetchTrending ? api.songs.getTrendingSongs() : undefined
];
const [
randomSongs = [],
trendingSongs = [],
] = await Promise.all(promises);
return [...currentSongs, ...randomSongs, ...trendingSongs];
}
and
/**
* @protected
* ...
*/
async function fillRemainingFilmsList(currentFilms, category) {
const remainingFilms = MAX_LIST_SIZE - currentFilms.length;
const shouldFetchTrending = Math.random() < FETCH_TRENDING_PROBABILITY;
const promises = [
api.films.getRandomFilms(category),
shouldFetchTrending ? api.films.getTrendingFilms(category) : undefined
];
const [
randomFilms = [],
trendingFilms = [],
] = await Promise.all(promises);
return [...currentFilms, ...randomFilms, ...trendingFilms];
}
As you can see, there is code repetition in both functions. How can I do to generalize them more? Any design pattern? The problem I am handling is that both methods calls to different api methods, and have different parameters... but, in the other hand, I am trying to not repeat my self in the logic.
Aucun commentaire:
Enregistrer un commentaire