You are here: Links of Interest » HEIG-VD » [PRO] Virtual Comics Library » Rapport » Architecture
Architecture
Table of Contents
Architecture
Modèle de Domaine
Le coeur de l'application se concentre sur la gestion d'une bibliothèque de livres virtuels.
<uml title=“Modèle de Domaine”> hide methods hide empty fields hide class circle hide interface circle
class Catalog class CatalogNode {
+name
} class Category class Series class VolumeMetadata {
+number +title
} class SeriesMetadata {
+authors[*] +artists[*] +released +summary
} class Tag {
+name
}
class Volume {
}
class Page {
}
CatalogNode <|– Category CatalogNode <|– Series
Catalog - “1” Category: root CatalogNode “*” – Category: children
CatalogNode - “*” VolumeMetadata: volumes VolumeMetadata *–> “0..1” SeriesMetadata: metadata Series *→ “1” SeriesMetadata: metadata
SeriesMetadata o–> “*” Tag: tags VolumeMetadata → Volume Volume –> Page </uml>
Une bibliothèque est divisée en plusieurs Catalogues qui représentent les différentes sources d'informations soit locales soit distantes. Chaque catalogue permet d'organiser ses enfants dans un arbre de Catégories et de Séries. Les catégories permettant de grouper les séries (et les catégories). La librairie n'impose pas de signification particulière quant aux critères de catégorisations. Un utilisateur pourrait par exemple choisir de catégoriser ses séries par genre alors qu'un autre par année de parution.
Les séries et les catégories peuvent toutes deux contenir des Volumes qui représentent un exemplaire physique. Etant donné que certaines maisons de publication éditent parfois des compilations de plusieurs chapitres (courant dans l'industrie du comics ou les “chapitres” individuels d'une douzaine sont publiés chaque semaine et sont ensuite republiés en un volume contenant tous les chapitres d'un arc) en un seul volume aucunne signification particulière n'est imposée à la notion de volume dans la librairie.
Chaque série, en plus de contenir ses volumes, possède aussi des informations concernant son ou ses auteurs et dessinateurs, son année de publication, un résumé de la série et les Tags qualifiant la série.
Un volume qui n'est pas situé dans une série mais une catégorie est considéré comme un One-Shot et possède alors les mêmes informations qu'une série.
Composants du Système
<uml title=“Composants du Système”>
package “ch.vcl.api” {
interface Catalog component CatalogFactory interface Volume interface VolumeFactory component VolumeLoader component VolumeWriter component VolumeStore component ThumbnailStore Catalog -- CatalogFactory VolumeStore -- Catalog ThumbnailStore -- Catalog Volume "*" . Catalog VolumeLoader -- VolumeFactory VolumeWriter -- VolumeFactory Volume <.. VolumeLoader: loads Volume <.. VolumeWriter: writes
}
package “ch.vcl.crawler” {
interface CrawlerFactory component Crawler component Builder CrawlerFactory --> Crawler: builds Builder <. Crawler
}
package “ch.vcl.desktop” {
interface Config component Library component Reader component Editor component CrawlerUI Library --> Reader Library --> Editor Library --> CrawlerUI CrawlerUI - CrawlerFactory Library -> Config Config -> Catalog
}
</uml>
L'application est séparée en trois parties:
- libvcl
- api fournit un api permettant de manipuler les différents types de catalogues de manière transparente.
- crawler fournit un api permettant de télécharger un série depuis un site de publication.
- desktop est la partie graphique permettant d'afficher et manipuler les éléments de la librairie.
API libVCL
L'api permet de rendre transparents les différents modes de stockage des catalogues (XML, SQLite) ainsi que les différents emplacements (Local ou Distant HTTP).
CatalogFactory
permet d'instancier les différents types de catalogues et leur objets dépendants de manière transparente pour les utilisateurs de l'API.VolumeStore
permet de charger un volume depuis le disque en fonction de ses meta-informations stockées dans le catalogue.ThumbnailStore
permet de récupérer les miniatures correspondant à un volume depuis ses meta-informations dans le catalogue.VolumeLoader
charge le contenu d'un catalogue en fonction de son moteur de stockage. Gère aussi une mise en cache en cas de données distantes pour permettre une consultation hors ligne.VolumeWriter
écrit le contenu d'un catalogue (local) en fonction de son moteur de stockage.
Crawler libVCL
Le crawler est un module permettant de composer une série à partir d'un site web (ex: mangafox.me).
CrawlerFactory
fournit une instance d'un crawler approprié pour une url spécifiée.Crawler
parse la structure html du site web pour en extraire les informations sur la série concernée. Crée un descripteur contenant la liste des volumes et des images qui les composent.Builder
télécharge les images et compose les différents volumes de la série. Les volumes sont ensuite sauvegardés sur le disque et ajoutés au catalogue spécifié.
Desktop
L'application bureau affiche le contenu des différents catalogues des utilisateurs en utilisant les fonctionnalités fournies par l'API et le crawler.
Config
stocke les préférences de l'applications tels que les emplacements des catalogues de l'utilisateur ainsi que ses préférences de lecture.Library
affiche le contenu des catalogues de l'utilisateur et permet de modifier les catalogues locaux.Reader
permet de lire un volumeEditor
permet de créer/modifier un volumeCrawlerUI
fournit une interface graphique pour l'utilisation du crawler.