From d9196eefc8107df9ee9c314644a9d78e8f8ed3f9 Mon Sep 17 00:00:00 2001 From: Corentin LEMAIRE Date: Sat, 3 Jun 2023 12:03:37 +0200 Subject: [PATCH] Enhance doc --- Images/Diagramme_architecture.png | Bin 0 -> 63242 bytes Images/Diagramme_paquetage.png | Bin 23393 -> 24331 bytes README.md | 164 ++++++++++++++++-------------- 3 files changed, 85 insertions(+), 79 deletions(-) create mode 100644 Images/Diagramme_architecture.png diff --git a/Images/Diagramme_architecture.png b/Images/Diagramme_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9cf7116ab00c5e8328c83f7320c1dbc4ddf542 GIT binary patch literal 63242 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 literal 0 HcmV?d00001 diff --git a/Images/Diagramme_paquetage.png b/Images/Diagramme_paquetage.png index b1d19ddbc9c474b016abd02a3608cac0b2f20338..849b94e9fc477f18e9ee207e2a2d10c61463bc61 100644 GIT binary patch literal 24331 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 WK1gVjg8yeW*MWV8do%agp8h{>w8>2X diff --git a/README.md b/README.md index 9b467a1..4267839 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,35 @@ # Linaris_MAUI_SAE_201 +#### Description de l'architecture + +![DA](Images/Diagramme_architecture.png) + +Notre programme se compose de deux parties distinctes : les **vues** et le **modèle**. + +Pour les **vues**, cela correspond aux visuels de l'application. Pour le modèle, cela correspond à la logique de l'application, son fonctionnement. +Ces deux parties sont liées par le **DataBinding** liant les données et le modèle avec les vues. + +
    + +Pour permettre cela, nous avons mis en oeuvre le patron de conception de **"façade"** grâce à la classe *Manager*. En effet, cette classe est un *point d'entrée* vers le modèle, où le fonctionnement est caché par des méthodes et propriétés comme c'est le cas pour les listes d'objets. Les vues ne savent pas comment ces listes sont créées, elles ne font que l'utiliser. Cette classe **gère le modèle** mais est aussi l'interlocuteur des vues. C'est un **lien** entre ces deux parties. Cela nous permettait de bien **séparer les vues et le modèle**, mais aussi de **réduire** et **clarifier** le code présent dans le code-behind des vues. + +
    + +De plus, nous avons intégré le patron de conception de **"stratégie"** grâce à l'interface *IDataManager* et l'*injection de dépendance par le contructeur* du Manager. En effet, cela nous permet de *changer de méthode* de sérialisation très facilement. Nous pouvons donc utiliser les stubs pour tester le programme et repasser sur la sérialisation XML pour utiliser l'application en un simple changement. Cela permet une **adaptabilité** de code non négligeable. Il suffit de changer le paramètre donné au constructeur du Manager. + +En outre, pour que cela fonctionne, l'interface *IDataManager* est indispensable, afin de s'assurer que toutes les méthodes de sérialisation aient bien **toutes les méthodes** nécessaires au bon fonctionnement de l'application. Grâce à cela, nous n'avons pas à nous demander quelle est la méthode de sérialisation pusique l'appel de la méthode de l'interface appellera la méthode de la technique de sérialisation demandée. Nous obtenons un résultat différent selon la méthode **sans changer le code**. Par exemple, dans la classe *App*, nous pouvons simplement appeler la méthode de sérialisation du manager, nous n'avons pas à changer ce code à chaque changement de méthode de sérialisation. Cela nous fait **gagner en temps** et en **adaptabilité de code**. + + +Grâce à ces patrons de conception, nous pouvons passer des stubs à la sérialisation XML bien plus facilement et **sans changer le code** des vues. + +
    + +Afin de lier nos différents projets, nous avons ajouté des **dépendances**. En effet, pour que l'*application console*, les *vues* et les *tests unitaires* fonctionnent, nous avons ajouté la dépendance vers le *modèle*. + +Par ailleurs, nous avons aussi ajouté la dépendance vers **XUnit** pour le projet des *tests unitaires* et la dépendance vers **ToolKit** pour les vues afin de pouvoir utiliser *MediaElement* pour la lecture de médias. + +--- + ## Diagramme de classe ```plantuml @@ -174,19 +204,19 @@ 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 +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 ``` @@ -491,14 +521,14 @@ class StubPlaylist { 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 +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 ``` @@ -556,35 +586,38 @@ class StubInfoTitle {} class StubPlaylist {} class IDataManager {} class LinqXmlSerialization {} -class StubManager {} +class StubManager +{ + + Manager(IDataManager dataManager) +} 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 +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 ``` @@ -603,6 +636,7 @@ Ce diagramme représente les **liens** entre les deux diagrammes ci-dessus. 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. +Tous ces projets sont en .NET 7.0. #### Model @@ -618,14 +652,15 @@ Nos vues (*Linaris*) ont besoin de Model afin d'effectuer le data-binding pour q #### 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. +Ce paquet contient une application console C#. Elle contient donc nos tests fonctionnels de notre application. +Pour effectuer différents tests 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 @@ -658,32 +693,3 @@ end Notre sérialisation permet de sauvegarder nos données dans des fichiers *XML* ainsi que de charger dans des collections les données contenues dans ceux-ci. Cette méthode est appelée lorsque l'utilisateur démarre l'application *Linaris* (MAUI). Celle-ci appelle ensuite les différentes fonctions de chargement codées en *C#* présentes dans la classe *LinqXmlSerialization*. Grâce à la bibliothèque **LINQ_XML**, la sérialisation peut récupérer les données présentes dans les différents fichiers pour les classes **Artist**, **CustomTitle** et **Playlist** et les mettre dans les différentes *ObservableCollection*. Pour les classes **InfoTitle** et **Album**, les données sont récupérées dans les collections des stubs correspondant et les mettre dans les différentes *ObservableCollection*. Les données sont ensuite utilisables par les vues via le **manager**. - - ---- - -#### Description de l'architecture - -Notre programme se compose de deux parties distinctes : les **vues** et le **modèle**. - -Pour les **vues**, cela correspond aux visuels de l'application. Pour le modèle, cela correspond à la logique de l'application, son fonctionnement. -Ces deux parties sont liées par le **DataBinding** liant les données et le modèle avec les vues. - -
    - -Pour permettre cela, nous avons mis en oeuvre le patron de conception de **"façade"** grâce à la classe *Manager*. En effet, cette classe est un *point d'entrée* vers le modèle, où le fonctionnement est caché par des méthodes et propriétés comme c'est le cas pour les listes d'objets. Les vues ne savent pas comment ces listes sont créées, elles ne font que l'utiliser. Cette classe **gère le modèle** mais est aussi l'interlocuteur des vues. C'est un **lien** entre ces deux parties. Cela nous permettait de bien **séparer les vues et le modèle**, mais aussi de **réduire** et **clarifier** le code présent dans le code-behind des vues. - -
    - -De plus, nous avons intégré le patron de conception de **"stratégie"** grâce à l'interface *IDataManager* et l'*injection de dépendance par le contructeur* du Manager. En effet, cela nous permet de *changer de méthode* de sérialisation très facilement. Nous pouvons donc utiliser les stubs pour tester le programme et repasser sur la sérialisation XML pour utiliser l'application en un simple changement. Cela permet une **adaptabilité** de code non négligeable. Il suffit de changer le paramètre donné au constructeur du Manager. - -En outre, pour que cela fonctionne, l'interface *IDataManager* est indispensable, afin de s'assurer que toutes les méthodes de sérialisation aient bien **toutes les méthodes** nécessaires au bon fonctionnement de l'application. Grâce à cela, nous n'avons pas à nous demander quelle est la méthode de sérialisation pusique l'appel de la méthode de l'interface appellera la méthode de la technique de sérialisation demandée. Nous obtenons un résultat différent selon la méthode **sans changer le code**. Par exemple, dans la classe *App*, nous pouvons simplement appeler la méthode de sérialisation du manager, nous n'avons pas à changer ce code à chaque changement de méthode de sérialisation. Cela nous fait **gagner en temps** et en **adaptabilité de code**. - - -Grâce à ces patrons de conception, nous pouvons passer des stubs à la sérialisation XML bien plus facilement et **sans changer le code** des vues. - -
    - -Afin de lier nos différents projets, nous avons ajouté des **dépendances**. En effet, pour que l'*application console*, les *vues* et les *tests unitaires* fonctionnent, nous avons ajouté la dépendance vers le *modèle*. - -Par ailleurs, nous avons aussi ajouté la dépendance vers **XUnit** pour le projet des *tests unitaires* et la dépendance vers **ToolKit** pour les vues afin de pouvoir utiliser *MediaElement* pour la lecture de médias. \ No newline at end of file