【问题标题】:What is the pros and cons of using Generic DAO and Generic Service Pattern in Spring MVC with Hibernate在 Spring MVC 和 Hibernate 中使用 Generic DAO 和 Generic Service Pattern 的优缺点是什么
【发布时间】:2016-02-21 01:42:54
【问题描述】:

我想在我的新项目中实现通用 DAO 和通用服务。我在网上看过很多例子。

在开始之前,我想知道使用这种设计模式的优缺点。

谁能告诉我使用这种模式是否可取?

【问题讨论】:

    标签: spring hibernate generics genericdao


    【解决方案1】:

    我认为,对 DAO 和通用 DAO 有不同的看法会更好。关于 Pros 的一些话(如果您使用 ORM,我的建议是有效的,例如 Hibernate,而不是普通的 JDBC)。

    1. 为实际存储系统创建一个很好的抽象层。

    这是一个营销废话。在现实生活中,我们在各种 RDBMS(Oracle RDBMS -> PostgreSQL)之间迁移时遇到问题。不谈论存储系统类型的更改(例如 RDBMS -> NoSQL)。

    1. 提供更面向对象的持久层视图。

    不!很难正确地做到这一点。大多数 DAO 实现都有几十种方法,例如

    getSomething(String x, String y, String z);
    getSomethingOther(String x, String z); 
    
    1. 在域类和执行数据库数据访问的代码之间提供清晰的分离。[使用 JDBC、ORM[类似 休眠] 或 JPA]。

    可能是,但这种分离的用处被夸大了。

    1. 一旦您设置了通用 CRUD 流,就可以为其他 DAO 重复相同的布局。

    没错。

    【讨论】:

    • 例如我有一个带有 CRUD 实现的通用 dao 类,我们如何为其他 DAO 重复。
    • @NeelkandanSivathanu 我认为是继承。
    • 最后我为基本的 crud 操作实现了通用 DAO,并在其他 DAO 中重用。谢谢@v.ladyev
    【解决方案2】:

    当一个以上的 DAO 类想要与数据库通信时,通用 DAO 设计模式就会出现(例如 CRUD(Create,Read ,Update and Delete)),如果没有这种设计模式,您最终将编写单独的代码为每个 DAO 类进行数据库调用(使用会话),这通常是一项乏味的工作,因为对于 DAO 类的每个新实现,您都必须编写自己的代码来处理数据库。

    以下是使用通用 DAO 的一些优点和缺点。

    注意:下面给出的详细信息是我从对 SO Question Pros and Cons of the use of DAO pattern 的回答中学到的知识

    优点

    1。创建实际存储系统的一个很好的抽象层。

    2。提供更面向对象的持久层视图。

    3。在域类和代码之间提供清晰的分离 将从数据库执行数据访问。[使用 JDBC,ORM [like 休眠] 或 JPA]

    4。一旦你设置了通用的 CRUD 流程,就可以使用相同的布局 对其他 DAO 重复。

    缺点

    1。如果您手写 DAO,那么代码可能会变得乏味和重复,您必须使用代码生成器/模板和 ORM。

    Q - 谁能告诉我使用这种模式是否可取?

    A- 在观察了上述优点和缺点之后,我在我的应用程序中使用 Generic DAO 作为抽象层,以根据 CRUD 与数据库进行通信,这实际上帮助我减少了大量重复代码来做其他相同的事情DAOs。起初需要时间来适应它,之后使用通用 DAO 会让你的生活变得轻松。

    【讨论】:

    • 感谢@Dev。我担心单元测试,如果我更改任何通用函数的功能,我需要进行端到端测试而不是测试一个组件。在这种情况下,这种通用模式如何提供帮助。
    • @Neelkandan Sivathanu 其他方式如果您更改任何通用函数的功能,则无需进行端到端测试,而是仅测试一个组件,例如我有方法public T persist(T entity) 接受域对象并执行 session.saveOrUpdate(entity) ,假设我在这里更改了一些逻辑,只需要确保更改是否反映在域对象中,并且将反映在所有域对象中,就像使用 java 泛型一样。
    • 我也是同样的情况。谢谢。
    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 2013-02-06
    • 2018-01-14
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    相关资源
    最近更新 更多