使用模型作为 GenericDAO

Posted

技术标签:

【中文标题】使用模型作为 GenericDAO【英文标题】:Using Model as GenericDAO 【发布时间】:2012-02-15 22:23:43 【问题描述】:

我使用 playframework 已有 2 年了。框架具有“JPA on streoids”功能。我非常喜欢它。

http://www.playframework.org/documentation/1.2.4/5things

这是示例代码:

User connectedUser = User.find("byEmail", connected()).first();
...
connectedUser.delete();
...
connectedUser.save();

这种方法使用了很多辅助方法。其中一些是静态方法。 每个模型文件都扩展了模型类,瞧。您可以使用查找、保存、删除、获取...

现在我使用 Spring MVC 3.1。我喜欢它的 MVC 用法。 但是连接系统有点复杂。

我读了很多文章。其中一些使用服务层、dao 层和模型层。 其中一些仅使用 dao 层和模型层。 有些人正在为每个模型对象以及服务类和服务接口创建 DAO 接口和 DAO 类。 其中一些使用通用 DAO 类。

事实上,我对所有这些变体有点困惑。

我们为什么要使用 DAO 层。单个 hibernateUtil 类并命名 查询对于 CRUD 操作来说是不够的。 我们为什么不使用播放框架方法? 为什么我们对每个 DAO 类都使用接口?仅仅执行还不够? 我们为什么要使用不必要的服务层?

【问题讨论】:

【参考方案1】:

DAO 层有助于将数据访问代码与业务逻辑代码隔离开来。这在您开始对业务逻辑进行单元测试时特别有用,因为它允许模拟 DAO。所有的应用程序都不是简单的 CRUD 操作。

接口具有相同的可测试性优势。阅读what reasons are there to use interfaces (Java EE or Spring and JPA),我在其中解释了拥有接口的优势。

服务层是最重要的层。它是用于划分交易的一种。您可以避免使用 DAO 层,特别是如果您有极其简单的类似 crud 的数据访问。但服务层至关重要。您不希望在各自的事务中分别进行三个插入和一个更新。请参阅DAO Design Pattern and Servlets 了解我解释为什么服务层如此重要的问题。

【讨论】:

以上是关于使用模型作为 GenericDAO的主要内容,如果未能解决你的问题,请参考以下文章

Django模型:使用多个值作为键?

使用模型作为 GenericDAO

使用枚举作为领域模型的属性

如何使用 Devise gem 生成的 User 模型生成的 UserID 作为其他模型的外键?

为啥我不能使用模型方法作为默认值?无论如何,Python/Django 模型中的 self 是啥?

使用核心数据生成的类作为模型对象......?