# Linaris_MAUI_SAE_201

## Diagramme de classe

```plantuml
@startuml
class Artist {
    + string Name
    + Artist(string name)
    + Artist()
    + boolean Equals(object obj)
    + int GetHashCode()
    + string ToString()
}

class Album {
    - {static} long nbAlbum = 0
    + long ID
    + string Name
    + string Description
    + string ImageURL
    + string Information
    + Artist Artist
    + ObservableCollection<InfoTitle> InfoTitles
    + Album(string name, string imageURL, Artist artist, string description, string information)
    + Album()
    + void AddTitle(InfoTitle title)
    + void RemoveTitle(InfoTitle title)
    + boolean Equals(object obj)
    + int GetHashCode()
    + string ToString()
}

class Playlist {
    + string Name
    + string Description
    + ObservableCollection<CustomTitle> Titles
    + string ImageURL
    + int Index
    + boolean Shuffle = false
    + boolean looptitle = false
    + IEnumerable<int> played
    + bool IsSubMenuVisible
    + Playlist(string nom, string description, string imageURL)
    + Playlist()
    + void AddTitle(CustomTitle morceau)
    + void RemoveTitle(CustomTitle morceau)
    + CustomTitle NextTitle()
    + CustomTitle PreviousTitle()
    + CustomTitle GetCurrentTitle()
    + boolean Equals(object? obj)
    + int GetHashCode()
    + string ToString()
    - {static} int RandomGenerator(int n)
    + bool HasCustomTitle(CustomTitle customTitle)
}

class Title {
    + string Name
    + string ImageURL
    + string Information
    + Title(string nom, string file_Name, string informations)
    + boolean Equals(object obj)
    + int GetHashCode()
    + string ToString()
}

enum Genre
{
    HIP_HOP
    POP
    ROCK
    ELECTRO
    CLASSIQUE
    JAZZ
    VARIETE_FRANCAISE
    VARIETE_INTERNATIONALE
    REGGAE
    RAP
    RNB
    DISCO
    BLUES
    COUNTRY
    FUNK
    GOSPEL
    METAL
    K_POP
}

class CustomTitle {
    + string Path
    + bool IsSubManuVisible
    + bool IsPlaylistMenuVisible
    + bool IsNewPlaylistMenuVisible
    + CustomTitle(string name, string imageURL, string information, string path)
    + CustomTitle()
    + boolean Equals(object obj)
    + int GetHashCode()
    + string ToString()
}

class InfoTitle {
    + string Description
    + IEnumerable<Artist> Feat
    + Genre Genre
    + long AlbumID
    + InfoTitle(string name, string imageURL, string information, Artist artist, string description, Genre genre, long albumID)
    + InfoTitle()
    + void AddFeat(Artist artist)
    + void RemoveFeat(Artist artiste)
    + boolean Equals(object obj)
    + int GetHashCode()
    + string ToString()

}

class Manager {
    + {static} readonly int MAX_NAME_LENGTH = 75
    + {static} readonly int MAX_DESCRIPTION_LENGTH = 500
    + {static} readonly string DEFAULT_NAME = "Unknown"
    + {static} readonly string DEFAULT_URL = "none.png"
    + {static} readonly string DEFAULT_DESC = ""
    + IDataManager DataManager
    - ObservableCollection<Album> Albums
    - ObservableCollection<CustomTitle> CustomTitles
    - ObservableCollection<InfoTitle> InfoTitles
    - ObservableCollection<Playlist> Playlists
    - ObservableCollection<Artist> Artists
    + Album CurrentAlbum
    + Playlist CurrentPlaylist
    + InfoTitle CurrentInfoTitle
    + CustomTitle CurrentPlaying
    + Manager(IDataManager dataManager)
    + void NextTitle()
    + void PreviousTitle()
    + CustomTitle CurrentTitle()
    + void Loop()
    + void Shuffle()
    + void AddAlbum(Album album)
    + void AddCustomTitle(CustomTitle title)
    + void AddInfoTitle(InfoTitle title)
    + void AddPlaylist(Playlist playlist)
    + void AddArtist(Artist artist)
    + void RemoveAlbum(Album album)
    + void RemoveCustomTitle(CustomTitle title)
    + void RemoveInfoTitle(InfoTitle title)
    + void RemovePlaylist(Playlist playlist)
    + ObservableCollection<Playlist> GetPlaylists()
    + ObservableCollection<Album> GetAlbums()
    + ObservableCollection<CustomTitle> GetCustomTitles()
    + ObservableCollection<InfoTitle> GetInfoTitles()
    + ObservableCollection<Artist> GetArtists()
    + void LoadSerialization()
    + void SaveSerialization()
    + Playlist GetPlaylistByName(string name)
    + Artist GetArtistByName(string name)
    + CustomTitle GetCustomTitleByPath(string path)
    + InfoTitle GetInfoTitleByName(string name)
    + Album GetAlbumByName(string name)
    + Album GetAlbumById(long id)
}

Album o-- "+ Artist" Artist
Album *-- "+ InfoTitles*" InfoTitle
Album .. Manager

Artist .. Manager

Playlist o-- "+ Titles*" CustomTitle
Playlist .. Manager

Title .. Manager

CustomTitle --|> Title

InfoTitle --|> Title
InfoTitle o-- "+ Genre" Genre
InfoTitle o-- "+ Artist" Artist
InfoTitle o-- "+ Feat*" Artist

Manager o-- "+ Albums*" Album
Manager o-- "+ Artists*" Artist 
Manager o-- "+ InfoTitles*" InfoTitle 
Manager o-- "+ Playlists*" Playlist 
Manager o-- "+ CustomTitles*" CustomTitle 
Manager o-- "+ CurrentAlbum" Album 
Manager o-- "+ CurrentPlaylist" Playlist 
Manager o-- "+ CurrentInfoTitle" InfoTitle
Manager o-- "+ CurrentPlaying" CustomTitle

@enduml
```



```plantuml
@startuml

interface IDataManager {
    + void AddAlbum(Album album)
    + void AddAlbums(List<Album> albumsList)
    + void AddArtist(Artist artist)
    + void AddArtists(List<Artist> artistsList)
    + void AddPlaylist(Playlist playlist)
    + void AddPlaylists(List<Playlist> playlistsList)
    + void AddCustomTitle(CustomTitle title)
    + void AddCustomTitles(List<CustomTitle> customTitlesList)
    + void AddInfoTitle(InfoTitle title)
    + void AddInfoTitles(List<InfoTitle> infoTitlesList)
    + ObservableCollection<CustomTitle> GetCustomTitles()
    + CustomTitle GetCustomTitleByPath(string custom)
    + ObservableCollection<InfoTitle> GetInfoTitles()
    + InfoTitle GetInfoTitleByName(string name)
    + ObservableCollection<Album> GetAlbums()
    + Album GetAlbumByName(string name)
    + Album GetAlbumById(long id)
    + List<Artist> GetArtists()
    + Artist GetArtistByName(string name)
    + ObservableCollection<Playlist> GetPlaylists()
    + 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 RemoveAlbum(Album album)
    + void RemoveAlbums(List<Album> albumsList)
    + void RemoveArtist(Artist artist)
    + void RemoveArtists(List<Artist> artistsList)
    + void RemovePlaylist(Playlist playlist)
    + void RemovePlaylists(List<Playlist> playlistsList)
    + void RemoveCustomTitle(CustomTitle title)
    + void RemoveCustomTitles(List<CustomTitle> customTitlesList)
    + void RemoveInfoTitle(InfoTitle title)
    + void RemoveInfoTitles(List<InfoTitle> infoTitlesList)
    + void LoadSerialization()
    + void SaveSerialization()
    + 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)
}

class StubManager {
    + StubAlbum StubAlbum
    + StubArtist StubArtist
    + StubCustomTitle StubCustomTitle
    + StubInfoTitle StubInfoTitle
    + StubPlaylist StubPlaylist
    + StubManager()
    + ObservableCollection<Album> GetAlbums()
    + List<Artist> GetArtists()
    + ObservableCollection<Playlist> GetPlaylists()
    + ObservableCollection<CustomTitle> GetCustomTitles()
    + ObservableCollection<InfoTitle> 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<Album> albumsList)
    + void AddArtists(List<Artist> artistsList)
    + void AddPlaylists(List<Playlist> playlistsList)
    + void AddCustomTitles(List<CustomTitle> customTitlesList)
    + void AddInfoTitles(List<InfoTitle> 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<Album> albumsList)
    + void RemoveArtists(List<Artist> artistsList)
    + void RemovePlaylists(List<Playlist> playlistsList)
    + void RemoveCustomTitles(List<CustomTitle> customTitlesList)
    + void RemoveInfoTitles(List<InfoTitle> 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 LinqXmlSerialization {
    - string XMLPATH
    - string XMLFILEPLAYLISTS
    - string XMLFILECUSTOMS
    + StubInfoTitle StubInfoTitle
    + List<Artist> Artists
    + ObservableCollection<Album> Albums
    + ObservableCollection<Playlist> Playlists
    + ObservableCollection<InfoTitle> InfoTitles
    + ObservableCollection<CustomTitle> CustomTitles
    + LinqXmlSerialization(string pathDirectory)
    + void AddAlbum(Album album)
    + void AddArtist(Artist artist)
    + void AddCustomTitle(CustomTitle title)
    + void AddInfoTitle(InfoTitle title)
    + void AddPlaylist(Playlist playlist)
    + ObservableCollection<Album> GetAlbums()
    + List<Artist> GetArtists()
    + ObservableCollection<CustomTitle> GetCustomTitles()
    + ObservableCollection<InfoTitle> GetInfoTitles()
    + ObservableCollection<Playlist> GetPlaylists()
    + void RemoveAlbum(Album album)
    + void RemoveArtist(Artist artist)
    + void RemoveCustomTitle(CustomTitle title)
    + void RemoveInfoTitle(InfoTitle title)
    + void RemovePlaylist(Playlist playlist)
    + void LoadSerialization()
    + void SaveSerialization()
    + void LoadPlaylists()
    + void SavePlaylists()
    + void LoadArtists()
    + void SaveArtists()
    + void LoadCustomTitles()
    + void SaveCustomTitles()
    + void LoadAlbums()
    + void SaveAlbums()
    + void LoadInfoTitles()
    + void SaveInfoTitles()
    + {static} Genre GetGenreByName(string genre)
    + InfoTitle GetInfoTitleByName(string name)
    + Artist GetArtistByName(string name)
    + Album GetAlbumByName(string name)
    + Album GetAlbumById(string id)
    + CustomTitle GetCustomTitleByPath(string custom)
    + void AddAlbums(List<Album> albumsList)
    + void AddArtists(List<Artist> artistsList)
    + void AddPlaylists(List<Playlist> playlistsList)
    + void AddCustomTitles(List<CustomTitle> customTitlesList)
    + void AddInfoTitles(List<InfoTitle> 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<Album> albumsList)
    + void RemoveArtists(List<Artist> artistsList)
    + void RemovePlaylists(List<Playlist> playlistsList)
    + void RemoveCustomTitles(List<CustomTitle> customTitlesList)
    + void RemoveInfoTitles(List<InfoTitle> 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)
}

class StubAlbum {
    + StubArtist StubArtist
    + ObservableCollection<Album> Albums
    + StubAlbum()
    + ObservableCollection<Album> GetAlbums()
    + Album GetAlbumByName(string name)
    + void AddAlbum(Album album)
    + void RemoveAlbum(Album album)
}

class StubArtist {
    + List<Artist> Artists
    + StubArtist()
    + List<Artist> GetArtists()
    + Artist GetArtistByName(string name)
    + void AddArtist(Artist artist)
    + void RemoveArtist(Artist artist)
}

class StubCustomTitle {
    + ObservableCollection<CustomTitle> CustomTitles
    + StubCustomTitle()
    + ObservableCollection<CustomTitle> GetCustomTitles()
    + List<CustomTitle> GetCustomTitlesByNames(List<string> names)
    + void AddCustomTitle(CustomTitle customTitle)
    + void RemoveCustomTitle(CustomTitle customTitle)
}

class StubInfoTitle {
    + StubAlbum StubAlbum
    + ObservableCollection<InfoTitle> InfoTitles
    + StubInfoTitle()
    + ObservableCollection<InfoTitle> GetInfoTitles()
    + List<InfoTitle> GetInfoTitlesByNames(List<string> 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<Playlist> Playlists
    + StubPlaylist()
    + ObservableCollection<Playlist> GetPlaylists()
    + Playlist GetPlaylistByName(string name)
    + void AddPlaylist(Playlist playlist)
    + void RemovePlaylist(Playlist playlist)
}

LinqXmlSerialization --|> IDataManager
StubManager --|> IDataManager
StubManager *-- "+ StubArtist" StubArtist
StubManager *-- "+ StubPlaylist" StubPlaylist
StubManager *-- "+ StubAlbum" StubAlbum
StubManager *-- "+ StubInfoTitle" StubInfoTitle
StubManager *-- "+ StubCustomTitle" StubCustomTitle
StubInfoTitle *-- "+ StubArtist" StubArtist
StubAlbum *-- "+ StubArtist" StubArtist
LinqXmlSerialization o-- "+ StubInfoTitle" StubInfoTitle

@enduml
````


```plantuml
@startuml

class StubAlbum {}
class StubArtist {}
class StubCustomTitle {}
class StubInfoTitle {}
class StubPlaylist {}
class IDataManager {}
class StubLinqXmlSerializationAlbum {}
class StubManager {}
class Manager {}

StubAlbum o-- "+ Albums*" Album
StubArtist *-- "+ Artists*" Artist
StubCustomTitle *-- "+ CustomTitles*" CustomTitle
StubInfoTitle *-- "+ InfoTitles*" InfoTitle
StubPlaylist *-- "+ Playlists*" Playlist

IDataManager .. Album
IDataManager .. Artist
IDataManager .. InfoTitle
IDataManager .. CustomTitle
IDataManager .. Playlist
IDataManager .. Genre

LinqXmlSerialization o-- "+ Artists*" Artist
LinqXmlSerialization o-- "+ Albums*" Album
LinqXmlSerialization o-- "+ Playlists*" Playlist
LinqXmlSerialization o-- "+ Infotitles*" InfoTitle
LinqXmlSerialization o-- "+ Customtitles*" CustomTitle

StubManager .. InfoTitle
StubManager .. Artist
StubManager .. Album
StubManager .. CustomTitle
StubManager .. Playlist

Manager *-- "+ DataManager" IDataManager

@enduml
```

# Note

*Les classes CustomTitle, Playlist et Manager héritent de l'interface INotifyPropertyChanged afin de permettre le DataBinding de ces classes*


### Explications

#### Album

Cette classe sert à modéliser des albums de musique. Ils ne sont pas jouables et sont uniquement implantés à titre informatif. Dans ce but, elle comporte plusieurs attributs comme un nom, une description, des informations complémentaires
ou encore une URL pour son image (la pochette).


#### Artist

Cette classe sert à modéliser les artistes qui réalise les albums. Il ne possède qu'un nom en atrribut.

#### Title

Cette classe sert à modé+liser différents titres. Il possède plusieurs attributs comme un nom, une URL pour son image (cover) ainsi que des informations complémentaires.


#### InfoTitle

Cette classe hérite de **Title**. Elle hérite donc de tout ses attributs. Comme son nom l'indique, ces titres ont comme spécificité d'être uniquement informatif. Ils sont contenus dans les albums. Elle possède également d'autres attributs comme
une description, un artiste (classe **Artist**) et une liste d'artiste pour les featuring.

#### CustomTitle

Cette classe hérite de **Title**. Elle hérite donc de tout ses attributs. Ces titres sont destinés à pouvoir être ajouter dans des playlists et à être jouer.
Hormis les attributs hérités, cette classe possède un attribut path (chemin) qui lui permet d'indiquer où se situe le fichier audio.


#### Playlist

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

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)

### Explications

Notre projet est un projet MAUI se nommant **Linaris**. Une erreur a été effectuée lors de la conception, ce qui fait que nos vues
portent le même nom. Pour les différencier, le paquet *Linaris* qui concerne les vues sera écrit en italique.

#### Model

Le paquet **Model** est une bibliothèque de classes C#. Certaines se trouvent à la racine de celle-ci. D'autres se trouvent dans des sous-dossiers
comme la sérialisation (**Serialization**) ou encore les stubs (**Stub**).

La **sérialisation** a besoin du **stub** pour pouvoir stocker et charger les informations présentes dans les différents fichiers de sauvergarde.

#### Linaris

Ce paquet contient nos différentes vues codées en C#/XAML.
Nos vues (*Linaris*) ont besoin de Model afin d'effectuer le data-binding pour que notre application ne soit pas uniquement graphique.

#### Console

Ce paquet contient une application console C#.
Pour effectuer différents test fonctionnels sur nos différentes classes du modèle, l'application console (**Console**) a besoin de celui-ci.

#### TestUnitaires

Ce paquet contient les tests unitaires de nos différentes classes. Il utilise *xUnit* pour les réaliser.
Pour effectuer ceux-ci, le paquet correspondant (**TestUnitaires**) dépend du modèle.


## Diagramme de séquence

### LoadSerialization()


```plantuml
@startuml
autonumber
actor       Utilisateur    as user
participant  Front   as   vues
participant  Serialization   as   seria
participant  Files   as   files
collections Collections as lists
group LoadSerialization [On Start]
    user -> vues : Démarre l'application
    vues -> seria : Appelle la fonction de chargement
    seria -> files : Récupère les données des fichiers
    seria -> lists : Demande les données dans les collections
    seria <-- lists : Retourne les données
    vues <-- seria : Données utilisables par les vues
end
@enduml
```




