Keine Cache-Version

Caching deaktiviert Standardeinstellung für diese Seite:aktiviert (code LNG204)
Wenn die Anzeige zu langsam ist, können Sie den Benutzermodus deaktivieren, um die zwischengespeicherte Version anzuzeigen.

Bibliobrol : le DAO

Nous pouvons utiliser une base de données MS Access pour stocker les informations de notre application.

Ce choix présente deux avantages majeurs :

  • Les pilotes de la base de données sont normalement pris en charge par le système d'exploitation, même si la machine sur laquelle nous exécutons l'application n'est pas pourvue du logiciel MS Access. En effet, nous pouvons accéder à une base de données Access (le fichier portant l'extension .mdb) sans utiliser le logiciel Access.
  • Si nous utilisons un chemin relatif vers la base de données, l'application et la base de données peuvent se trouver sur un support de stockage amovible (disque dur externe, memory stick, lecteur mp3, etc.).

Si nous désirons partager une base de données en réseau, il nous faudra placer la base de données sur un répertoire partagé, et nous pourrons alors accéder simultanément aux données.

Le problème de ce genre de situation est qu'Access n'est pas le type de base de données idéal pour une utilisation simultanée par un grand nombre d'utilisateurs.
Nous pouvons résoudre certains problèmes en verrouillant les données accédées en modification pour gérer les accès concurrents, mais si l'application doit supporter un nombre d'utilisateurs simultané important il vaut mieux se tourner vers d'autres systèmes de gestion de bases de données (SGBD).

De plus, si un nouveau SGBD arrive sur le marché et est plus performant, nous ne désirons certainement pas recoder toute l'application.

Nous devons en outre prendre en compte la maintenance du code de l'application.

Pour toutes ces raisons, les accès au système de persistance doivent à tout prix être groupés et séparés du reste du code. Ni la vue, ni le modèle ne doivent savoir quel est le type de persistance employé. Il est dès lors tout à fait impensable d'accéder directement à une base de données depuis la vue (une fenêtre par exemple) ou le modèle propre (par exemple, un objet Ouvrage peut posséder la méthode sauverOuvrage(), mais ne connaît pas le système employé pour la sauvegarde).

Découplage du DAO

Comment rendre le code de notre application de gestion de media indépendant du système de persistance ?

Nous allons créer une classe abstraite DAOFactory. Lorsque nous nous adressons à cette classe, nous en utilisons en réalité une de ses implémentations concrètes. De cette manière, nous n'avons pas besoin de savoir à quelle classe concrète nous nous adressons.

Dans le cas de cet exemple, nous pouvons mettre en œuvre le pattern Singleton pour être certain de toujours travailler avec la même instance. Le constructeur (dont l'accès est réduit afin d'éviter d'instancier un nouvel objet) lit le fichier de configuration pour déterminer quel système de persistance utiliser, puis retourne un objet du type de persistance désiré.

Nous pouvons estimer gràce aux grasp patterns que c'est à cette classe que revient la responsabilité de déterminer quels sont les types de persistances disponibles. Nous maintiendrons donc cette information sous la forme d'une énumération (voir les énumérations en Java, ou les énumérations en C#), afin de nous assurer que les valeurs ne puissent être malencontreusement modifiées.

Nous avons vu que notre modèle contenait un certain nombre de classes, mais nous devons pouvoir stocker ces valeurs dans un système persistant. Nous allons donc créer une interface correspondant à chaque classe que nous désirons stocker dans notre persistance.

Nous devons donc déclarer dans notre classe abstraite DAOFactory des méthodes abstraites qui nous permettront d'accéder aux différentes implémentations de ces interfaces en fonction du système de persistance utilisé.

Les différentes interfaces définissent les méthodes auxquelles nous devons avoir accès.

  1. using be.gaudry.bibliobrol.config;
  2. using be.gaudry.bibliobrol.model.enums;
  3. using be.gaudry.bibliobrol.model.dao.config;
  4.  
  5. namespace be.gaudry.bibliobrol.model.dao
  6. {
  7. /// <summary>
  8. /// Provides concrete persistence classes for the persistent type defined in the user settings
  9. /// </summary>
  10. public abstract class DAOFactory
  11. {
  12.  
  13. #region singleton
  14. protected static DAOFactory instance = null;
  15. static readonly object threadLockObject = new object();
  16. protected DAOFactory() { }
  17. /// <summary>
  18. /// Get unique instance of <code>DAOFactory</code> providing methods to access to the persistent layer.
  19. /// </summary>
  20. public static DAOFactory Instance
  21. {
  22. get
  23. {
  24. lock (threadLockObject)
  25. {
  26. if (instance == null)
  27. {
  28. resetDAO();
  29. }
  30. return instance;
  31. }
  32. }
  33. }
  34. /// <summary>
  35. /// Resets unique instance of <code>DAOFactory</code> to use another persistent layer.<br />
  36. /// <b><u>Be extremly carefull with using this method :</u></b> if application is not restarted,
  37. /// inconsistent data between old persistent layer
  38. /// and new persistent layer will crash the application and the persistent storage.
  39. /// </summary>
  40. public static void resetDAO()
  41. {
  42. PERSISTENCE_TYPE persistentType = Config.PersistentType;
  43.  
  44. switch (persistentType)
  45. {
  46. //case PERSISTENCE_TYPE.SQLExpress:
  47. //case PERSISTENCE_TYPE.MySQL:
  48. // instance = new mysql.MySQLFactory();
  49. // break;
  50. //case PERSISTENCE_TYPE.Access:
  51. default:
  52. instance = new msaccess.AccessFactory();
  53. break;
  54. }
  55. }
  56. #endregion
  57.  
  58. #region getDao methods to implement
  59. public abstract AbstractDBConfig getDBConfig();
  60. public abstract IConfigDao getConfigDao();
  61. public abstract IPersonDao getPersonDao();
  62. public abstract IBrolDao getBrolDao();
  63. public abstract IMediaBrolDao getMediaBrolDao();
  64. public abstract ITaskDao getTaskDao();
  65. public abstract IExporterDao getExporterDao();
  66. public abstract IImporterDao getImporterDao();
  67. public abstract IStatsDao getStatsDao();
  68. public abstract ISerieDao getSerieDao();
  69. #endregion
  70. }
  71. }

Inhaltsverzeichnis Haut

Remarque

Nous ne sommes pas obligés de strictement créer une interface par classe dont nous assurons le stockage. Nous pouvons par exemple grouper certaines notions dans une même interface si cette opération n'altère pas la compréhension et la maintenance du code.

Deutsche Übersetzung

Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.

Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.

Vielen Dank im Voraus.

Dokument erstellt 06/12/2006, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/bibliobrol-dao.html?_escaped_fragment_=

Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.

Referenzen

  1. Zeigen Sie - html-Dokument Sprache des Dokuments:uk Core J2EE Patterns : Sun Developer Network, Data Access Object

Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.

Inhaltsverzeichnis Haut