我一直在研究我的设计模式,并想到我无法在任何地方找到一个好的答案.所以也许有经验的人可以帮助我.DAO模式是否仅用于访问数据库中的数据?我发现的大多数答案都暗示是;事实上,大多数谈论或写入DAO模式的人都倾向于...
我一直在研究我的设计模式,并想到我无法在任何地方找到一个好的答案.所以也许有经验的人可以帮助我.
DAO模式是否仅用于访问数据库中的数据?
我发现的大多数答案都暗示是;事实上,大多数谈论或写入DAO模式的人都倾向于自动假设您正在使用某种数据库.
我不同意.我可以有一个DAO如下:
public interface CountryData {
public List<Country> getByCriteria(Criteria criteria);
}
public final class SQLCountryData implements CountryData {
public List<Country> getByCriteria(Criteria criteria) {
// Get From SQL Database.
}
}
public final class GraphCountryData implements CountryData {
public List<Country> getByCriteria(Criteria criteria) {
// Get From an Injected In-Memory Graph Data Structure.
}
}
这里我有一个DAO接口和2个实现,一个用于SQL数据库,另一个用于内存图形数据结构.它是否正确?或者图表实现是否意味着在其他类别的图层中创建?
如果它是正确的,那么抽象每个DAO实现所需的实现特定细节的最佳方法是什么?
例如,参考上面的Criteria Class I参考.假设它是这样的:
public final class Criteria {
private String countryName;
public String getCountryName() {
return this.countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
}
对于SQLCountryData,它需要以某种方式将countryName属性映射到SQL标识符,以便它可以生成正确的SQL.对于GraphCountryData,可能需要创建针对countryName属性的某种谓词对象,以从失败的图中过滤出顶点.
如果没有将客户端代码与抽象的CountryData相结合,并使用这样的实现特定细节,那么抽象这样的细节的最佳方法是什么?
有什么想法吗?
编辑:
我在条件类中包含的示例很简单,但考虑是否要允许客户端构造复杂的标准,它们不仅要指定要过滤的属性,还要指定等于运算符,复合标准的逻辑运算符,和价值.
解决方法:
DAO是DAL(数据访问层)的一部分,您可以使用任何类型的实现(XML,RDBMS等)支持数据.您只需确保在运行时注入/使用项目实例.像Spring / Guice这样的DI框架在这种情况下大放异彩.此外,您的Criteria接口/实现应该足够通用,以便仅捕获业务详细信息(即国家/地区名称标准),并且实现类再次处理实际映射.
对于SQL,在您的情况下,您可以手动生成SQL,使用像Spring这样的帮助程序库生成SQL,或使用像MyBatis这样的完整框架.在我们的项目中,Spring XML配置文件用于解耦客户端和实现;它可能会因你而异.
编辑:我看到你在上一个问题中引起了类似的关注.答案仍然是一样的.您可以在界面中添加所需的灵活性;你只需要确保实现足够聪明,以理解它收到的所有参数,并将它们适当地映射到底层源.在我们的例子中,我们从业务层检索了值对象,并将其转换为SQL实现层中可供MyBatis使用的映射.同样,这个过程非常透明,服务层与DAO通信的唯一方法是通过接口定义的值对象.
本文标题为:java – DAO只能访问数据库吗?
基础教程推荐
- java – 在mongodb中按日期对值排序 2023-11-06
- SpringBoot+Vue实现动态菜单的思路梳理 2023-03-06
- Mybatis超详细讲解构建SQL方法 2023-02-19
- 详解Java Synchronized的实现原理 2023-06-06
- Springboot下RedisTemplate的两种序列化方式实例详解 2023-05-24
- 使用Mac OS上的java程序设置mysql.jar的类路径的问题 2023-11-05
- Java设计模式之中介者模式 2023-06-10
- 为什么不建议使用Java自定义Object作为HashMap的key 2023-02-10
- java使用枚举封装错误码及错误信息详解 2023-08-08
- Spring AOP实现打印HTTP接口出入参日志 2023-06-01