From 58fca49e494133f0dbee6ea67b986c2e5b9d6fcb Mon Sep 17 00:00:00 2001 From: Corentin LEMAIRE Date: Thu, 1 Jun 2023 17:01:26 +0200 Subject: [PATCH] Separate class diagram and add stubs description --- README.md | 240 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 172 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index 72a01cb..b0d5774 100644 --- a/README.md +++ b/README.md @@ -218,55 +218,6 @@ class Manager { + Album GetAlbumById(long id) } -class StubAlbum { - + StubArtist StubArtist - + ObservableCollection Albums - + StubAlbum() - + ObservableCollection GetAlbums() - + Album GetAlbumByName(string name) - + void AddAlbum(Album album) - + void RemoveAlbum(Album album) -} - -class StubArtist { - + List Artists - + StubArtist() - + List GetArtists() - + Artist GetArtistByName(string name) - + void AddArtist(Artist artist) - + void RemoveArtist(Artist artist) -} - -class StubCustomTitle { - + ObservableCollection CustomTitles - + StubCustomTitle() - + ObservableCollection GetCustomTitles() - + List GetCustomTitlesByNames(List names) - + void AddCustomTitle(CustomTitle customTitle) - + void RemoveCustomTitle(CustomTitle customTitle) -} - -class StubInfoTitle { - + StubAlbum StubAlbum - + ObservableCollection InfoTitles - + StubInfoTitle() - + ObservableCollection GetInfoTitles() - + List GetInfoTitlesByNames(List names) - + void AddInfoTitle(InfoTitle title) - + void RemoveInfoTitle(InfoTitle title) - + {static} void AddFeat(InfoTitle infoTitle, Artist artist) - + {static} void RemoveFeat(InfoTitle infoTitle, Artist artist) -} - -class StubPlaylist { - + ObservableCollection Playlists - + StubPlaylist() - + ObservableCollection GetPlaylists() - + Playlist GetPlaylistByName(string name) - + void AddPlaylist(Playlist playlist) - + void RemovePlaylist(Playlist playlist) -} - class StubManager { + StubAlbum StubAlbum + StubArtist StubArtist @@ -438,26 +389,9 @@ Manager o-- "+ CustomTitles*" CustomTitle Manager o-- "+ CurrentAlbum" Album Manager o-- "+ CurrentPlaylist" Playlist Manager o-- "+ CurrentInfoTitle" InfoTitle -Manager o-- "+ CurrentPlaying" CustomTitle - -StubArtist *-- "+ Artists*" Artist - -StubAlbum *-- "+ StubArtist" StubArtist -StubAlbum o-- "+ Albums*" Album - -StubCustomTitle *-- "+ CustomTitles*" CustomTitle - -StubInfoTitle *-- "+ StubArtist" StubArtist -StubInfoTitle *-- "+ InfoTitles*" InfoTitle - -StubPlaylist *-- "+ Playlists*" Playlist +Manager o-- "+ CurrentPlaying" CustomTitle StubManager --|> IDataManager -StubManager *-- "+ StubArtist" StubArtist -StubManager *-- "+ StubPlaylist" StubPlaylist -StubManager *-- "+ StubAlbum" StubAlbum -StubManager *-- "+ StubInfoTitle" StubInfoTitle -StubManager *-- "+ StubCustomTitle" StubCustomTitle StubManager .. InfoTitle StubManager .. Artist StubManager .. Album @@ -481,6 +415,145 @@ IDataManager .. Genre @enduml ``` + + + +```plantuml +@startuml + +class StubManager { + + StubAlbum StubAlbum + + StubArtist StubArtist + + StubCustomTitle StubCustomTitle + + StubInfoTitle StubInfoTitle + + StubPlaylist StubPlaylist + + StubManager() + + ObservableCollection GetAlbums() + + List GetArtists() + + ObservableCollection GetPlaylists() + + ObservableCollection GetCustomTitles() + + ObservableCollection GetInfoTitles() + + void AddAlbum(Album album) + + void AddCustomTitle(CustomTitle title) + + void AddInfoTitle(InfoTitle title) + + {static} void AddFeat(InfoTitle infoTitle, Artist artist) + + void AddPlaylist(Playlist playlist) + + void AddArtist(Artist artist) + + void RemoveAlbum(Album album) + + void RemoveCustomTitle(CustomTitle title) + + void RemoveInfoTitle(InfoTitle title) + + void RemovePlaylist(Playlist playlist) + + void RemoveArtist(Artist artist) + + void LoadSerialization() + + void SaveSerialization() + + CustomTitle GetCustomTitleByPath(string custom) + + InfoTitle GetInfoTitleByName(string name) + + Album GetAlbumByName(string name) + + Artist GetArtistByName(string name) + + void AddAlbums(List albumsList) + + void AddArtists(List artistsList) + + void AddPlaylists(List playlistsList) + + void AddCustomTitles(List customTitlesList) + + void AddInfoTitles(List infoTitlesList) + + Playlist GetPlaylistByName(string name) + + void UpdateCustomTitle(CustomTitle title, string name, string url, string info, string path) + + void UpdateCustomTitleByPath(string path, string name, string newUrl, string info, string newPath) + + void UpdateInfoTitle(InfoTitle title, string name, string url, string info, Artist artist, string description, Genre genre) + + void UpdateInfoTitleByName(string name, string newUrl, string info, Artist artist, string description, Genre genre) + + void UpdateAlbum(Album album, string name, string url, Artist artist, string description, string info) + + void UpdateAlbumByName(string name, string newUrl, Artist artist, string description, string info) + + void UpdateAlbumByArtistName(Album album, string name, string url, string artist, string description, string info) + + void UpdateAlbumByNameByArtistName(string name, string newUrl, string artist, string description, string info) + + void UpdatePlaylist(Playlist playlist, string name, string description, string url) + + void UpdatePlaylistByName(string name, string description, string newUrl) + + void UpdateArtist(Artist artist, string name) + + void UpdateArtistByName(string name, string newName) + + void RemoveAlbums(List albumsList) + + void RemoveArtists(List artistsList) + + void RemovePlaylists(List playlistsList) + + void RemoveCustomTitles(List customTitlesList) + + void RemoveInfoTitles(List infoTitlesList) + + bool ExistsPlaylist(Playlist playlist) + + bool ExistsPlaylistByName(string name) + + bool ExistsAlbum(Album album) + + bool ExistsAlbumByName(string name) + + bool ExistsArtist(Artist artist) + + bool ExistsArtistByName(string name) + + bool ExistsCustomTitle(CustomTitle title) + + bool ExistsCustomTitleByName(string name) + + bool ExistsInfoTitle(InfoTitle title) + + bool ExistsInfoTitleByName(string name) + + Album GetAlbumById(long id) +} + + + +class StubAlbum { + + StubArtist StubArtist + + ObservableCollection Albums + + StubAlbum() + + ObservableCollection GetAlbums() + + Album GetAlbumByName(string name) + + void AddAlbum(Album album) + + void RemoveAlbum(Album album) +} + +class StubArtist { + + List Artists + + StubArtist() + + List GetArtists() + + Artist GetArtistByName(string name) + + void AddArtist(Artist artist) + + void RemoveArtist(Artist artist) +} + +class StubCustomTitle { + + ObservableCollection CustomTitles + + StubCustomTitle() + + ObservableCollection GetCustomTitles() + + List GetCustomTitlesByNames(List names) + + void AddCustomTitle(CustomTitle customTitle) + + void RemoveCustomTitle(CustomTitle customTitle) +} + +class StubInfoTitle { + + StubAlbum StubAlbum + + ObservableCollection InfoTitles + + StubInfoTitle() + + ObservableCollection GetInfoTitles() + + List GetInfoTitlesByNames(List names) + + void AddInfoTitle(InfoTitle title) + + void RemoveInfoTitle(InfoTitle title) + + {static} void AddFeat(InfoTitle infoTitle, Artist artist) + + {static} void RemoveFeat(InfoTitle infoTitle, Artist artist) +} + +class StubPlaylist { + + ObservableCollection Playlists + + StubPlaylist() + + ObservableCollection GetPlaylists() + + Playlist GetPlaylistByName(string name) + + void AddPlaylist(Playlist playlist) + + void RemovePlaylist(Playlist playlist) +} + + + +StubManager --|> IDataManager +StubManager *-- "+ StubArtist" StubArtist +StubManager *-- "+ StubPlaylist" StubPlaylist +StubManager *-- "+ StubAlbum" StubAlbum +StubManager *-- "+ StubInfoTitle" StubInfoTitle +StubManager *-- "+ StubCustomTitle" StubCustomTitle + + +StubAlbum *-- "+ StubArtist" StubArtist + +LinqXmlSerialization o-- "+ StubInfoTitle" StubInfoTitle + +@enduml +```` + # Note *Les classes CustomTitle, Playlist et Manager héritent de l'interface INotifyPropertyChanged afin de permettre le DataBinding de ces classes* @@ -519,15 +592,46 @@ Hormis les attributs hérités, cette classe possède un attribut path (chemin) Cette classe possède une structure similaire à la classe **Album**. Elle contient des titres personnalisés (**CustomTitle**). Les morceaux sont joués dans un ordre précis (du premier jusqu'au dernier). Cette classe hérite des attributs de Title. Cette classe permet la gestion des playlists, soit l'accès à la musique suivante, précédente en fonction de la demande de l'utilisateur (en boule, aléatoire). Cela permet une lecture de musiques d'une playlist en boucle sans problème. -### Manager +#### Manager Notre classe manager est une interface entre le code-behind et les vues. Il permet de gérer les données grâce au DataManager et de gérer les fonctionnalités de l'application comme les playlists. Cette interface fonctionne avec le parton de conception de façade, étant une interface, un point d'entrée de l'application vers le modèle. De plus, nous utilisons un deuxième patron de conception, qui est la stratégie, avec une injection de dépendance par le constructeur de la classe. En effet, afin de créer un Manager, il faut joindre la méthode de sérialisation (stubs ou LINQ dans notre cas). + #### LinqXmlSerialization Notre sérialisation fonctionne avec lecture/écriture dans des fichiers XML. Pour cela, nous utilisons la bibliothèque *LINQ_XML* qui nous permet de créer et de modifier les différents fichiers. Pour la sérialisation des CustomTitle et des Playlists nous utilisons le LINQ. Cependant, pour les classes InfoTitle, Artist et Albums, ces données sont récupérées des Stubs, étant statiques et à but informatif. Cette sérialisation a été testée et approuvée sur Windows et Android. +#### StubManager + +Le StubManager est un point d'entrée vers les Stubs, permettant de les gérer avec des requêtes CRUD. Ces Stubs vont permettre de tester l'application, le modèle et l'application en générant des données directement dans le code. Cette classe permet de séparer le code de chaque Stub afin de le gérer avec plus de facilité. + + +#### StubAlbum + +Le StubAlbum permet de générer des albums avec des informations écrites dans le code. Il permet également de les gérer. Cette classe utiliser les stubs StubArtist afin de lier l'album avec l'artiste. Ce stub est aussi utilisé afin d'afficher ces albums à titre informatif. + + +#### StubArtist + +Le StubArtist permet de créer des informations sur des artistes. Il permet de plus de créer les artistes pour les InfoTitle à afficher dans les titres informatifs présents dans les albums. + + +#### StubInfoTitle + +Le StubInfoTitle est un stub avec des valeurs pour les titres informatifs affichés dans les albums déjà rédigées. Il est donc utilisé dans la sérialisation LINQ aussi. + + +#### StubCustomTitle + +Le StubCustomTitle permet de tester la gestion des titres personnalisés avec des valeurs prédéfinies. Ce stub n'est utilisé que pour les tests et le debug. + + +#### StubPlaylist + +Le StubPlaylist créé des informations écrites dans le code afin de tester les méthodes et la classe des playlists. Elle n'est pas utilisée par la sérialisation LINQ. + + ## Diagramme de paquetage ![DP](Images/Diagramme_paquetage.png)