Created
October 22, 2022 22:25
-
-
Save felipecastrosales/cb992d28f529e3292e8a725f564b691d to your computer and use it in GitHub Desktop.
solid
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Player | |
// Objetivo: Tocar musicas em mais de uma fonte (Spotify e Dezer) | |
// Construir as classes baseado no principio SOLID e CLEAN para esse player | |
// 1) search music by artist | |
// 2) search music by id | |
// 3) play music | |
// 4) pause music | |
// 5) continue music | |
// 1) Entity | |
// 2) UseCase | |
// 3) Repo | |
// 4) DataSource | |
// 5) Implementation | |
//////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////// | |
// 1 - Entity | |
abstract class Music {} | |
class MusicEntity implements Music { | |
final String id; | |
final String name; | |
final String artist; | |
final String album; | |
final String url; | |
MusicEntity({ | |
required this.id, | |
required this.name, | |
required this.artist, | |
required this.album, | |
required this.url, | |
}); | |
} | |
//////////////////////////////////////////////////////////////////////////////// | |
// 2 - UseCase | |
abstract class MusicUseCase { | |
Future<List<Music>> searchMusicByArtist(String artist); | |
Future<Music> searchMusicById(String id); | |
Future<void> playMusic(Music music); | |
Future<void> pauseMusic(); | |
Future<void> continueMusic(); | |
} | |
//////////////////////////////////////////////////////////////////////////////// | |
// 3 - Repository | |
abstract class MusicRepository { | |
Future<List<Music>> searchMusicByArtist(String artist); | |
Future<Music> searchMusicById(String id); | |
Future<void> playMusic(Music music); | |
Future<void> pauseMusic(); | |
Future<void> continueMusic(); | |
} | |
//////////////////////////////////////////////////////////////////////////////// | |
// 4 - DataSource | |
abstract class MusicDataSource { | |
Future<List<Music>> searchMusicByArtist(String artist); | |
Future<Music> searchMusicById(String id); | |
Future<void> playMusic(Music music); | |
Future<void> pauseMusic(); | |
Future<void> continueMusic(); | |
} | |
//////////////////////////////////////////////////////////////////////////////// | |
// 5 - Implementation | |
class MusicUseCaseImpl implements MusicUseCase { | |
final MusicRepositoryImpl _repository; | |
MusicUseCaseImpl({ | |
required MusicRepositoryImpl repository, | |
}) : _repository = repository; | |
@override | |
Future<List<Music>> searchMusicByArtist(String artist) async { | |
return await _repository.searchMusicByArtist(artist); | |
} | |
@override | |
Future<Music> searchMusicById(String id) async { | |
return await _repository.searchMusicById(id); | |
} | |
@override | |
Future<void> playMusic(Music music) async { | |
return await _repository.playMusic(music); | |
} | |
@override | |
Future<void> pauseMusic() async { | |
return await _repository.pauseMusic(); | |
} | |
@override | |
Future<void> continueMusic() async { | |
return await _repository.continueMusic(); | |
} | |
} | |
abstract class MusicDataSourceImpl implements MusicDataSource { | |
final MusicDataSourceImpl _dataSource; | |
MusicDataSourceImpl({ | |
required MusicDataSourceImpl dataSource, | |
}) : _dataSource = dataSource; | |
@override | |
Future<List<Music>> searchMusicByArtist(String artist) async { | |
return await _dataSource.searchMusicByArtist(artist); | |
} | |
@override | |
Future<Music> searchMusicById(String id) async { | |
return await _dataSource.searchMusicById(id); | |
} | |
@override | |
Future<void> playMusic(Music music) async { | |
return await _dataSource.playMusic(music); | |
} | |
@override | |
Future<void> pauseMusic() async { | |
return await _dataSource.pauseMusic(); | |
} | |
@override | |
Future<void> continueMusic() async { | |
return await _dataSource.continueMusic(); | |
} | |
} | |
abstract class MusicRepositoryImpl implements MusicRepository { | |
final MusicDataSourceImpl _dataSource; | |
MusicRepositoryImpl({ | |
required MusicDataSourceImpl dataSource, | |
}) : _dataSource = dataSource; | |
@override | |
Future<List<Music>> searchMusicByArtist(String artist) async { | |
return await _dataSource.searchMusicByArtist(artist); | |
} | |
@override | |
Future<Music> searchMusicById(String id) async { | |
return await _dataSource.searchMusicById(id); | |
} | |
@override | |
Future<void> playMusic(Music music) async { | |
return await _dataSource.playMusic(music); | |
} | |
@override | |
Future<void> pauseMusic() async { | |
return await _dataSource.pauseMusic(); | |
} | |
@override | |
Future<void> continueMusic() async { | |
return await _dataSource.continueMusic(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment