From 50fd90e87d0351c210f5c36a7a7f67a0546b3184 Mon Sep 17 00:00:00 2001 From: Lou BRODA Date: Sat, 21 Oct 2023 13:39:34 +0200 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'README.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 195 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 180 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index aa204b6..08cae90 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,13 @@ ******* -Sommaire +### Sommaire 1. [Accessibilité](#acces) 2. [Progression](#progression) 3. [Présentation du projet](#presentation) - 4. [Contenu](#contenu) - 5. [Auteurs](#auteurs) + 4. [Architecture](#architecture) + 5. [Contenu](#contenu) + 6. [Auteurs](#auteurs) ******* @@ -27,7 +28,7 @@ Disponible sur :
-🚧 __EN PROGRESSION__ +## 🚧 __EN PROGRESSION__ ### Étape 1 : Développement des vues en XAML - Intégralité des pages proposées sur la page d'accueil développées @@ -90,22 +91,31 @@ Cette strcuture est une version remplaçant pour le moment le `Community Toolkit ### Étape 3 : MVVM Nous utilisons au sein de notre projet le **patron d'architecture MVVM** avec les ViewModels Wrapping et Applicatives. -- Les **Wrapping ViewModel** encapsulent les données du modèle et exposent des propriétés et des commandes nécessaires à la vue pour interagir avec le modèle. -- Les **Applicative ViewModel ** peuvent inclure une logique métier spécifique et des propriétés calculées, elles peuvent également exposer des commandes pour effectuer des actions spécifiques liées à la vue. - -```mermaid -classDiagram -direction LR - -``` - + +Nous retrouvons donc les 3 grandes parties du patron : + +- **Model** : +Le `Model` représente la `logique métier`. Il est écrit en `C#` et est adpaté pour diifférentes applications. + +- **View** : +Les `Vues` sont écrites en `XAML` et représentent l'interface utilisateur avec les vues de l'application. Le `Data Binding` est utilisé entre les propriétés du XAML et celles des ViewModels. Enfin, des évènements sont déclenchés à partir de certains composants des vues. + +- **ViewModel** : +Les `ViewModels` sont écrits en `C#` et sont divisables en deux grandes catégories : + * Les **Wrapping ViewModel** encapsulent les données du modèle et exposent des propriétés et des commandes nécessaires à la vue pour interagir avec le modèle. + * Les **Applicative ViewModel** peuvent inclure une logique métier spécifique et des propriétés calculées, elles peuvent également exposer des commandes pour effectuer des actions spécifiques liées à la vue. + +Le schéma suivant montre bien les relations entre les grandes parties du `patron MVVM` : + +![Schema_MVVM](documentation/schema_mvvm.png) + Le **diagramme de classes** pouvant être extrèmement grand à cause des multiples classes au sein de notre projet, j'ai décidé de représenter une partie de celui-ci qui pourrait se répéter pour toutes les autres parties. L'objectif principal étant de comprendre comment fonctionne le **modèle MVVM** et comment les classes intéragissent entre elles, j'ai choisi de faire mon exemple avec la partie des livres qui est la plus générale du sujet. *******
-### **Présentation** +## **Présentation** LivreLand : votre bibliothèque connectée ! Retrouver tous vos livres préférés en un clic. @@ -140,7 +150,7 @@ Retrouver tous vos livres préférés en un clic. **TP3** : - [ ] Modifier l'intégralité du code pour que l'application utilise désormais le MVVM Community Toolkit à la place du toolkit personnel -**TP 4** : +**TP 4** : Ajouter les vues et les VM nécessaires pour permettre : - [x] Le scan de code-barres afin d'ajouter de nouveaux livres * le scan de code-barres fonctionne mais le livre n'est pas encore directement ajouté dans la liste @@ -148,6 +158,161 @@ Ajouter les vues et les VM nécessaires pour permettre : ******* +
+ +## Architectures du modèle et des services fournises + +Dans cette partie, vous retrouverez dans un premier temps deux diagrammes mis à disposition dans le sujet représentant d'abord le `Modèle` puis les `Services et Interfaces` : + +### Modèle +```mermaid +classDiagram +direction LR +class Book { + +Id : string + +Title : string + +Publishers : List~string~ + +PublishDate : DateTime + +ISBN13 : string + +Series : List~string~ + +NbPages : int + +Format : string + +ImageSmall : string + +ImageMedium : string + +ImageLarge : string +} + +class Languages { + <> + Unknown, + French, +} + +class Work { + +Id : string + +Description : string + +Title : string + +Subjects : List~string~ +} + +class Contributor { + +Name : string + +Role : string +} + +class Author { + +Id : string + +Name : string + +ImageSmall : string + +ImageMedium : string + +ImageLarge : string + +Bio : string + +AlternateNames : List~string~ + +BirthDate : DateTime? + +DeathDate : DateTime? +} + +class Link { + +Title : string + +Url : string +} + +class Ratings { + +Average : float + +Count : int +} + +Book --> "1" Languages : Language +Book --> "*" Contributor : Contributors +Author --> "*" Link : Links +Work --> "*" Author : Authors +Work --> "1" Ratings : Ratings +Book --> "*" Author : Authors +Book --> "*" Work : Works + +class Status { + <> + Unknown, + Finished, + Reading, + NotRead, + ToBeRead +} + +class Contact{ + +string Id; + +string FirstName; + +string LastName; +} +``` + +--- + +### Services et Interfaces + +```mermaid +classDiagram +direction LR +Book --> "1" Languages : Language +Book --> "*" Contributor : Contributors +Author --> "*" Link : Links +Work --> "1" Ratings : Ratings +Work --> "*" Author : Authors +Book --> "*" Work : Works +Book --> "*" Author : Authors + +class IUserLibraryManager { + <> + +AddBook(Book book) : Task + +AddBook(string id) : Task + +AddBookByIsbn(string isbn) : Task + +RemoveBook(Book book) : Task + +RemoveBook(string id) : Task + +RemoveBook(string id) : Task + +AddToFavorites(Book book) : Task + +AddToFavorites(string bookId) : Task + +RemoveFromFavorites(Book book) : Task + +RemoveFromFavorites(string bookId) : Task + +UpdateBook(Book updatedBook) : Task + +AddContact(Contact contact) : Task + +RemoveContact(Contact contact) : Task + +LendBook(Book book, Contact contact, DateTime? loanDate) : Task + +GetBackBook(Book book, DateTime? returnedDate) : Task + +BorrowBook(Book book, Contact owner, DateTime? borrowedDate) : Task + +GiveBackBook(Book book, DateTime? returnedDate) : Task + + +GetCurrentLoans(int index, int count) + +GetPastLoans(int index, int count) + +GetCurrentBorrowings(int index, int count) + +GetPastBorrowings(int index, int count) + +GetContacts(int index, int count) +} + +class ILibraryManager { + <> + +GetBookById(string id) + +GetBookByIsbn(string isbn) + +GetBooksByTitle(string title, int index, int count, string sort) + +GetBooksByAuthorId(string authorId, int index, int count, string sort) + +GetBooksByAuthor(string author, int index, int count, string sort) + +GetAuthorById(string id) + +GetAuthorsByName(string substring, int index, int count, string sort) +} + +class Status { + <> +} + +IUserLibraryManager ..|> ILibraryManager +IUserLibraryManager ..> Status +IUserLibraryManager ..> Contact +IUserLibraryManager ..> Book +ILibraryManager ..> Book +ILibraryManager ..> Author +``` + +******* + ## Ressources - Temps