2010-03-28 3 views
0

Jusqu'à présent, j'ai été habitué à utiliser des DAO pour extraire des informations de bases de données. D'autres sources de données sont cependant possibles et je me demande si et comment le modèle pourrait être appliqué en général. Par exemple, je travaille actuellement sur une application qui récupère XML sur le Web. Le fichier XML pourrait être considéré comme une source de données et l'extraction réelle est similaire en principe à une requête de base de données. Je ne suis pas tout à fait sûr comment le DAO pourrait être structuré bien.Conception de DAO pour des sources de données autres qu'une base de données

Toutes les vues sur le sujet sont les bienvenues.

Répondre

4

Voir par exemple « Encapsulation ressources de données non-base de données en tant que classes DAO » section ici:

http://java.sun.com/blueprints/patterns/DAO.html

+0

Merci. Le lien suivant de cette page devrait s'avérer utile: http://java.sun.com/blueprints/code/jps131/src/com/sun/j2ee/blueprints/waf/view/template/ScreenDefinitionDAO.java.html –

4

Depuis OTI expriment seulement les opérations CRUD en termes d'objets, sans jamais se référer à leur source de données, je Je ne vois pas pourquoi c'est une question. Si votre DAO commence avec une interface qui répond à ces critères, les clients n'ont pas besoin de savoir s'il est implémenté en termes de XML ou de base de données relationnelle.

LINQ .NET parvient à transformer cette astuce. Peut-être que c'est un autre design que vous pouvez émuler pour ce problème.

+0

Ok, donc c'est l'interface qui est la plus importante. Est-ce une bonne pratique de mettre le code qui obtient réellement les données dans le DAO ou devrait-il être placé dans une classe séparée? Dans le cas d'un fichier XML, cela implique l'utilisation de URLConnection et DataInputStream. Il y a aussi du threading puisque plus d'un fichier doit être récupéré en une fois. –

+0

Obtenir les données semble comme il appartient dans l'implémentation à moi. Plus d'un fichier? Vous joignez deux sources XML dans un ensemble d'objets? – duffymo

+0

Eh bien, j'écris une sorte d'agrégateur de flux RSS en ce moment. En tant que tel, je me demande si le modèle DAO est vraiment justifié. De plus, cela devient plus confus pour moi si j'envisage de récupérer des données (ex: des valeurs monétaires) sur le web, puis de les sauvegarder localement. –

2

Votre DAO offre des méthodes génériques qui, comme vous l'avez déjà dit, sont indépendantes de toute source de données. Par conséquent, vous créez une interface DAO, puis fournissez simplement différentes implémentations. Les autres classes utilisent ensuite uniquement l'interface DAO.

public interface DummyDao 
{ 
    Dummy getDummy(String id); 
} 

public class SqlDummyDao implements DummyDao 
{ 
    public Dummy getDummy(String id) 
    { 
     // Do sql stuff and mapping to dummy bean here 
    } 
} 

public class XmlDummyDao implements DummyDao 
{ 
    public Dummy getDummy(String id) 
    { 
     XmlDocument xml = fetchRemoteXml(id); 
     // do xml mapping to dummy bean here 
    } 
} 
Questions connexes