Разработка DAO для источников данных, отличных от базы данных - PullRequest
0 голосов
/ 28 марта 2010

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

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

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

Ответы [ 3 ]

4 голосов
/ 28 марта 2010

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

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

4 голосов
/ 28 марта 2010

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

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

2 голосов
/ 28 марта 2010

Ваш 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
    }
}
...