Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为数据库以外的数据源设计DAO_Java_Xml_Fetch_Dao - Fatal编程技术网

Java 为数据库以外的数据源设计DAO

Java 为数据库以外的数据源设计DAO,java,xml,fetch,dao,Java,Xml,Fetch,Dao,到目前为止,我已经习惯于使用DAOs从数据库检索信息。不过,其他数据来源也是可能的,我想知道这种模式是否以及如何在总体上得到应用 例如,我现在正在开发一个在web上获取XML的应用程序。XML文件可以被视为一个数据源,实际获取原则上类似于数据库请求。不过,我不太确定DAO是如何构造的 欢迎对此主题发表任何意见。例如,请参阅此处的“将非数据库数据资源封装为DAO类”一节: 由于DAO仅以对象的形式表示CRUD操作,而从未引用它们的数据源,我不明白为什么这是一个问题。如果DAO以满足这些条件的接口开

到目前为止,我已经习惯于使用DAOs从数据库检索信息。不过,其他数据来源也是可能的,我想知道这种模式是否以及如何在总体上得到应用

例如,我现在正在开发一个在web上获取XML的应用程序。XML文件可以被视为一个数据源,实际获取原则上类似于数据库请求。不过,我不太确定DAO是如何构造的

欢迎对此主题发表任何意见。

例如,请参阅此处的“将非数据库数据资源封装为DAO类”一节:


由于DAO仅以对象的形式表示CRUD操作,而从未引用它们的数据源,我不明白为什么这是一个问题。如果DAO以满足这些条件的接口开始,那么客户端不需要知道它是用XML还是关系数据库实现的


NET的LINQ成功地扭转了这一局面。也许这是针对这个问题可以模拟的另一种设计。

您的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
    }
}

好的,所以界面是最重要的。将实际获取数据的代码放在DAO中是一种好的做法,还是应该将其放在单独的类中?对于XML文件,这涉及使用URLConnection和DataInputStream。还有一些线程,因为一次要检索多个文件。获取数据似乎属于我的实现。不止一个文件?您正在将两个XML源连接到一组对象中?我现在正在编写一种RSS提要聚合器。因此,我想知道DAO模式是否真的合理。另外,如果我考虑从网上检索数据(例如:货币值),然后将其保存在本地,这会让我更加困惑。谢谢。该页面中的以下链接应该很有用: