Created
October 22, 2022 22:25
-
-
Save felipecastrosales/46163c3197cc30097aa9aabc16cb21b9 to your computer and use it in GitHub Desktop.
solid 2
This file contains 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 | |
class ArtistEntity { | |
final String id; | |
final String name; | |
ArtistEntity({ | |
required this.id, | |
required this.name, | |
}); | |
} | |
class MusicEntity { | |
final String id; | |
final String name; | |
final ArtistEntity 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<MusicEntity>> searchMusicByArtist(String artist); | |
Future<MusicEntity> searchMusicById(String id); | |
Future<void> playMusic(MusicEntity music); | |
Future<void> pauseMusic(); | |
Future<void> continueMusic(); | |
} | |
//////////////////////////////////////////////////////////////////////////////// | |
// 3 - Repository | |
abstract class MusicRepository { | |
Future<List<MusicEntity>> searchMusicByArtist(String artist); | |
Future<MusicEntity> searchMusicById(String id); | |
Future<void> playMusic(MusicEntity music); | |
Future<void> pauseMusic(); | |
Future<void> continueMusic(); | |
} | |
//////////////////////////////////////////////////////////////////////////////// | |
// 4 - DataSource | |
abstract class MusicDataSource { | |
Future<List<MusicEntity>> searchMusicByArtist(String artist); | |
Future<MusicEntity> searchMusicById(String id); | |
Future<void> playMusic(MusicEntity 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<MusicEntity>> searchMusicByArtist(String artist) async { | |
return await _repository.searchMusicByArtist(artist); | |
} | |
@override | |
Future<MusicEntity> searchMusicById(String id) async { | |
return await _repository.searchMusicById(id); | |
} | |
@override | |
Future<void> playMusic(MusicEntity 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<MusicEntity>> searchMusicByArtist(String artist) async { | |
return await _dataSource.searchMusicByArtist(artist); | |
} | |
@override | |
Future<MusicEntity> searchMusicById(String id) async { | |
return await _dataSource.searchMusicById(id); | |
} | |
@override | |
Future<void> playMusic(MusicEntity 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<MusicEntity>> searchMusicByArtist(String artist) async { | |
return await _dataSource.searchMusicByArtist(artist); | |
} | |
@override | |
Future<MusicEntity> searchMusicById(String id) async { | |
return await _dataSource.searchMusicById(id); | |
} | |
@override | |
Future<void> playMusic(MusicEntity 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