java - 适用于 HTTP 和数据库的 DAO 模式

标签 java design-patterns interface

我即将在我的项目中实现 DAO 设计模式,并且我知道这是最常用于与数据库通信的。

但是由于通常有一个接口(interface)和一个实现,我不禁想到这也可以用于 HTTP。即,您有一个用于针对数据库进行 CRUD 的 DAO 实现,以及另一个用于访问 CRUD API 的 DAO 实现。但如果也这样使用,那么解决API可能没有删除权限的问题的常用方法是什么?

这是正确的还是为什么我需要一个接口(interface)?或者只是为了让我轻松更改数据库实现?

最佳答案

DAO模式一般用于解耦不同形式的数据表示;例如,将数据库模式与 Java 应用程序逻辑分开。接口(interface)(我认为您正在讨论的意义上)通常用于将 Java 逻辑的实现与其实现分离。这两种形式的解耦是完全不同的,如果这使设计更易于维护或更具表现力,那么没有理由不一起使用两者。即使 Java 代码旨在通用(例如,在某些可重用库中),那么我认为没有必要通过接口(interface)指定其行为,尽管对此存在不同的看法。

至于你的具体问题:如果你有对数据进行操作的 Java 方法,并且这些操作可能会失败,那么按照惯例你会抛出异常。如果您正在使用 DAO,并且部分 Java 逻辑与数据存储实现高度解耦,那么该逻辑甚至可能不会将“拒绝访问”视为一个有意义的概念。在这种情况下,您还必须解耦异常,并让 DAO 逻辑抛出一般的“更新失败”异常。该异常可以将来自特定存储实现的原始异常(“访问被拒绝”)传递给其调用者,调用者可能能够也可能无法理解它。广泛解耦的危险之一是,离错误源越远,错误处理就越不具体。

关于java - 适用于 HTTP 和数据库的 DAO 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46903370/

相关文章:

c# - 具体类实现中的 IEnumerable 与 List

java - 当您同时具有虚拟和真实实现的接口(interface)时,单元测试的最佳方法是什么?

Java Swing 范围 slider 用户界面

java - 如何在 JBoss7.1 中使用 Infinispan 查询

Scalaz,*语法类的目的

java - 如何验证生成的 Java 代码的语法?

java - Android Bitmap.class 中 native DecodeByteArray 的问题

java - 制作 Homebrew 配方

design-patterns - 对象 C++ 中的状态或观察者模式

c++ - 公共(public)接口(interface)方法的私有(private)实现