2010-03-28 5 views
0

До сих пор я использовался для использования DAO для извлечения информации из баз данных. Однако возможны другие источники данных, и мне интересно, можно ли и как шаблон применять в целом.Проектирование DAO для источников данных, отличных от базы данных

Например, теперь я работаю над приложением, которое извлекает XML в Интернете. XML-файл можно рассматривать как источник данных, и фактическая выборка в принципе аналогична запросу базы данных. Я не совсем уверен, как DAO может быть структурирована.

Любые мнения по этому вопросу приветствуются.

ответ

4

Смотрите, например «Инкапсуляция ресурсов данных без базы данных, как классы DAO» здесь раздел:

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

+0

Спасибо. Следующая ссылка с этой страницы должна оказаться полезной: http://java.sun.com/blueprints/code/jps131/src/com/sun/j2ee/blueprints/waf/view/template/ScreenDefinitionDAO.java.html –

4

Поскольку объекты DAO только выразить CRUD операции в терминах объектов, никогда не обращаясь к их источнику данных, я не может понять, почему это вопрос. Если ваш DAO начинается с интерфейса, который соответствует этим критериям, клиентам не нужно знать, реализовано ли оно в терминах XML или реляционной базы данных.

.NET LINQ удается превратить этот трюк. Возможно, это еще один проект, который вы можете подражать этой проблеме.

+0

Хорошо, так что это самый важный интерфейс. Является ли хорошей практикой поместить код, который фактически получает данные в DAO, или должен ли он быть помещен в отдельный класс? В случае XML-файла это связано с использованием URLConnection и DataInputStream. Существует также некоторая потоковая передача, так как за один раз нужно получить более одного файла. –

+0

Получение данных, похоже, принадлежит им для реализации. Несколько файлов? Вы объединяете два источника XML в один набор объектов? – duffymo

+0

Ну, я пишу своего рода агрегатор RSS-каналов на данный момент. Таким образом, мне интересно, действительно ли шаблон DAO действительно оправдан. Плюс, для меня становится все более запутанным, если я созерцаю получение данных (например: валютных ценностей) из Интернета, а затем сохранение их локально. –

2

Ваш DAO предлагает общие методы, которые, как вы уже сказали, не зависят от какого-либо источника данных. Поэтому вы создаете интерфейс DAO, а затем просто предоставляете различные реализации. Другие классы используют только интерфейс 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 
    } 
}