You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Lucas EVARD 7f129d717c
Mise à jour de 'README.md'
1 year ago
sources Gestion des favoris 1 year ago
.DS_Store meilleur gestion des statuts + à lire plus tard 1 year ago
.gitignore Initial commit 1 year ago
README.md Mise à jour de 'README.md' 1 year ago

README.md

PocketBook - Projet MVVM

Organisation

  • Les pages sont disponibles dans le dossier Pages.
  • Les ContentView réutilisé dans les pages se trouvent dans le dossier Composants/ContentView.
  • Les VM applicatives sont à l'intérieur du projet MAUI, dans le dossier Applicative_VM.
  • Les VM wrappant les classes du modèle sont présent dans une bibliothèque de classes externe au projet MAUI, dans le dossier ViewModel.

Il n'y a aucune dépendance entre le modèle et la vue.

Mon toolkit MVVM

Un toolkit MVVM a été mis en place afin de soulager les écritures redondantes pour wrapper le modèle et pour la gestion des modification de propriétées.

Intégration du toolkit au projet => Package MyToolkitMVVM :

classDiagram

class BaseViewModel~T~{
    +TModel Model
    -TModel model
    +BaseViewModel(model: TModel)
    +BaseViewModel():this(default(TModel))
}

class BaseViewModel{
    + BaseViewModel()
}

class ObservableObject{
    +PropertyChangedEventHandler? PropertyChanged;
    #OnPropertyChanged(propertyName: string)
    #SetProperty~T~(member: T ref, value: T, propertyName: string)
    #SetProperty~T~(member: T, value: T,action Action~T~, propertyName: string)
}

class RelayCommand~T~ {
+CanExecuteChanged: EventHandler
-execute: Action<T>
-canExecute: Func<T, bool>
+RelayCommand(Action<T> execute, Func<T, bool> canExecute)
+CanExecute(object? parameter): bool
+Execute(object? parameter): void
}

class RelayCommand {
-execute: Action<object>
-canExecute: Func<object, bool>
+RelayCommand(Action<object> execute, Func<object, bool> canExecute)
+Execute(): Task
}


class INotifyPropertyChanged{
    <<interface>>
}

class ICommand{
    <<interface>>
}


RelayCommand --|> ICommand
ObservableObject --|> INotifyPropertyChanged
BaseViewModel --|> ObservableObject

Ensuite, il suffit de choisir s'il faut hériter de BaseViewModel qui est générique, ou BaseViewModel.

Pour ma part, mes VM wrapper héritent automatiquement de BaseViewModel avec T désignant la classe du modèle à wrapper.

Cependant, mes VM applicatives n'héritent pas forcément de BaseViewModel, je le fais hériter seulement lorsqu'une propriétée doit être bindée dans la vue, comme pour ButtonsVM.

Vue

Concernant la vue, j'ai repris certains de vos composants:

  • Prêt/Emprunts => le bouton en forme de switch
  • Le bouton pour scanner un ISBN ou le saisir

J'ai repris certaines de mes vues afin de mettre en place la ToolbarItem.

La note des livres sont ramenée en nombre entier le plus proche. Ce qui implique que les étoiles sont affichées seulement pleines ou vides.

Bugs

En jouant avec la liste de livres, et en naviguant sur d'autres pages (tous,favoris,filtres et à lire plus tard), il est possible que le rendu des étoiles dans le détail des livres soit faux.

Si on ne commence pas l'affichage de la liste de livres par la page tous, il est possible que la liste s'affiche avec une hauteur très réduite.

Ce qui est implémenté

En prenant compte votre Readme, il y a :

  • La navigation en utilisant des Commands
  • Mise en place de **ContentView **
  • Affichage de la listes de livres et sélection d'un livre
  • Affichage entièrement bindé des détails d'un livre
  • Filtrage par Auteur,Note et Date de publication
  • Changement de statut d'un livre
  • Ajout d'un livre aux favoris, il suffit d'aller dans l'onglet déplacer un livre et appuyer sur 'Déplacer en favoris'
  • Ajout d'un livre par ISBN
  • Supprimer un livre, il suffit d'aller dans l'onglet déplacer un livre et appuyer sur 'Mettre à la poubelle'
  • Gestion de la pagination

Ce qui n'as pas été implémenté

En prenant compte votre Readme, il y a :

  • Prêt d'un livre
  • Utilisation du MVVM Community Toolkit
  • Scanner ISBN